删除基于另一个文件的文件中的行

时间:2014-05-12 10:31:16

标签: awk sed gnu

我有两个名为file1和file2的文件。我想删除file1中不在file2中的行。

文件1

rana     209    214 6   18  37  3   6.2
bashi    230    241 12  30  88  2.5 7.3
amir     245    250 6   14  29  2.3 4.8
joswa    190    195 6   15  45  2.5 7.5
edison   213    218 6   16  40  2.7 6.7

file2的

bashi
edison

期望的输出

bashi    230    241 12  30  88  2.5 7.3
edison   213    218 6   16  40  2.7 6.7

如何使用awk或sed执行此操作?

2 个答案:

答案 0 :(得分:2)

grep是你的朋友:

$ grep -wFf f2 f1
bashi    230    241 12  30  88  2.5 7.3
edison   213    218 6   16  40  2.7 6.7
  • w匹配单词。
  • F执行固定匹配(无正则表达式)。
  • f使用其他文件来获取模式。

答案 1 :(得分:0)

awk 'NR==FNR{a[$1]=1;next} $1 in a {print}' file2 file1

输出:

bashi    230    241 12  30  88  2.5 7.3
edison   213    218 6   16  40  2.7 6.7

读取file2并创建一个由第一个字段索引的数组,然后读取file1,如果第一个字段在数组中,则打印该行。