【问题标题】:Unix command (grep, sed or awk): output as input and search a fileUnix 命令(grep、sed 或 awk):作为输入输出并搜索文件
【发布时间】:2017-09-29 14:24:08
【问题描述】:

如果有人可以帮助我,我将不胜感激。

我想使用一些命令来执行此任务,无论是 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 行匹配,则提取到输出。这就是我想做的。

【问题讨论】:

  • awk 是完美的,看这个方向。这里有很多类似问题的回复来开始/做你的代码。
  • 我用过 cat File1.txt | grep -f - File2.txt 但不能指定列。

标签: awk sed grep


【解决方案1】:

这里是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 的整个匹配行。

【讨论】:

  • 您可以删除{print $0},因为它是默认操作
  • @user2182606,如果它解决了您的问题,您可以接受答案
猜你喜欢
  • 2021-03-29
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多