Bash grep在另一个文件中的文件中

时间:2014-05-06 09:44:18

标签: bash grep find

我有2个文件,其中一个包含: FILE1.TXT

632121S0 126.78.202.250 1
131145S0 126.178.20.250 1

另一个包含:file2.txt

632121S0        126.78.202.250  OBS
131145S0        126.178.20.250  OBS
313359S2        126.137.37.250  OBS

我想最终得到第三个文件,其中包含:

632121S0        126.78.202.250  OBS
131145S0        126.178.20.250  OBS

仅在两个文件中以相同字符串开头的行。我无法记住该怎么做。我尝试了几个grep,egrep并找到,我仍然无法正常使用它... 你能帮忙吗?

3 个答案:

答案 0 :(得分:3)

你可以使用这个awk:

$ awk 'FNR==NR {a[$1]; next} $1 in a' f1 f2
632121S0        126.78.202.250  OBS
131145S0        126.178.20.250  OBS

它基于two file processing的想法,通过循环遍历文件:

  • 首先遍历第一个文件,将第一个字段存储在数组a中。
  • 然后遍历第二个文件,检查其第一个字段是否在数组a中。如果是,则打印该行。

答案 1 :(得分:1)

要使用grep执行此操作,您需要使用process substitution

grep -f <(cut -d' ' -f1 file1.txt) file2.txt

grep -f使用文件作为在file2中搜索的模式列表。在这种情况下,不使用file1进行转换,而是使用进程替换来仅输出文件的第一列。

答案 2 :(得分:1)

如果您有很多这些行,那么实用程序join可能会有用。

  

join - 在公共字段上加入两个文件的行

这里是set of examples