需求简述
假定有两个文件, 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的每一行就是特征字符串的情况