Linux 批量过滤的三种Shell利器

需求简述

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章