【问题标题】:grep using grep resultsgrep 使用 grep 结果
【发布时间】:2017-12-18 05:36:44
【问题描述】:

假设我有两个包含属性名称和属性的文件,其中不同的数据存储在两个文件中:

1.txt:

abc12      3@     50
edf13      4@     50
dde8       3@     50

2.txt

abc12      3@     65
edf13      4@     50
dde8       3@     70
dde7       3@     70

我想grep如下: 首先是grep "3@" 1.txt | awk '{print $1}',然后是grep * 2.txt,其中star(*) 表示第一个grep 的输出。

所有内容都应在提示符的一行中完成。

预期输出:

abc12      3@     65
dde8       3@     70

谢谢

【问题讨论】:

  • 您的问题是什么,到目前为止您尝试过什么?
  • join <(grep 3@ 1.txt | sort) <(grep 3@ 2.txt | sort) -o 1.1,1.2,2.3 | column -t

标签: bash shell


【解决方案1】:

一个awk进程:

awk 'FNR==NR{if ($2 ~ "3@") a[$1]++; next} a[$1]' 1.txt 2.txt

第一个condition{action} 表示从第一个文件读取时,以第一个字段作为散列增加数组元素。第二个条件a[$1] 当此元素为一个或多个时为真,检查第二个文件,默认操作是打印该行。

【讨论】:

    【解决方案2】:

    我认为其他答案更好,如果你坚持grep

    grep "3@" 1.txt| awk '{print $1}' | while read i;do grep $i 2.txt;done
    

    【讨论】:

      【解决方案3】:

      join 和 grep 的另一种方式

      join -t $'\t' -o 2.1 2.2 2.3 1.txt 2.txt | grep 3@
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-07
        • 2016-10-10
        • 2020-05-19
        相关资源
        最近更新 更多