Unix命令(grep,sed或awk):输出作为输入并搜索文件

时间:2017-05-02 06:30:53

标签: awk sed grep

如果有人可以帮助我,我将非常感激。

我想使用grep,sed或awk(或其他)命令执行此任务。 我有两个文件。

档案1

0  
1  
4  

文件2

S   0   1832    *   0   *   *   *  
S   1   1801    *   0   *   *   *  
H   1   1298    99.2    +   0   0   301M10I997M493I  
S   2   1791    *   0   *   *   *  
S   3   1720    *   0   *   *   *  
S   4   1693    *   0   *   *   *  
S   11  1693    *   0   *   *   *  

我想要的输出是

S   0   1832    *   0   *   *   *  
S   1   1801    *   0   *   *   *  
H   1   1298    99.2    +   0   0   301M10I997M493I  
S   4   1693    *   0   *   *   *  

因此,如果file2的第二列与file1行匹配,则提取到输出。这就是我想要做的。

1 个答案:

答案 0 :(得分:2)

这是awk中的经典解决方案:

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

输出:

S   0   1832    *   0   *   *   *  
S   1   1801    *   0   *   *   *  
H   1   1298    99.2    +   0   0   301M10I997M493I  
S   4   1693    *   0   *   *   *

命令的第一部分仅在file1上执行,因为模式FNR == NR,仅对file1为真。它使用$ 1作为数组a的索引。下一个命令检查file2的$ 2是否作为数组中的索引。 file2 $ 2所需的匹配。最后一个命令打印file2的整个匹配行。