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的每一行就是特徵字符串的情況

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