使用grep的结果进行grep

3
假设我有两个文件,分别存储着属性名和属性值,而这些数据不同,具体内容如下:

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}',然后在第二个文件2.txt中执行grep *,其中星号(*)代表第一个grep的输出结果。
所有操作应在单个命令行中完成。
预期输出:
abc12      3@     65
dde8       3@     70

谢谢


你有什么问题,你已经尝试过什么了吗? - Pyves
join <(grep 3@ 1.txt | sort) <(grep 3@ 2.txt | sort) -o 1.1,1.2,2.3 | column -t - Cyrus
3个回答

4

通过一个 awk 进程:

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

第一个条件{操作}的意思是,当从第一个文件读取时,将具有此第一个字段作为哈希的数组元素增加。第二个条件a[$1]在该元素为一个或多个时为真,这将针对第二个文件进行检查,其默认操作是打印该行。


1

我认为其他答案更好,但如果您坚持使用grep,则可以这样:

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

0

使用 join 和 grep 的另一种方法

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接