需求簡述
假定有兩個文件, f1 和 f2
f1文件內容如下:
~% cat f1
a,1
a,1
a,1
b,2
c,3
c,3
e,3
e,3
h,1
j,2
f2文件內容如下:
~% cat f2
a
d
e
期望用f2的每一行來過濾f1的文件內容,也即輸出如下:
~% join -t, f1 f2
a,1
a,1
a,1
e,3
e,3
三種實現方法
Join
~% join -t, f1 f2
Join需要兩個文件都排好序,正是切菜之刀AWK
awk -F, 'NR==FNR {a[$1]=1; } NR>FNR&&a[$1] {print $0}' f2 f1
awk是無堅不摧的利器,而且不要求文件排序。對於f1爲大文件的情況特別有效。grep
~% grep -Fwf f2 f1
grep夠簡單,適用於f1的每一行就是特徵字符串的情況