$ grep HxH 20170213.csv | awk -F',' '{print $13}' | cut -b 25-27 | sort -u
868
881
896
904
913
914
918
919
920
问题>如何管道排序后的结果并将其输入grep
?
现在我必须手动执行以下命令。
grep 868 /tmp/aaa/*.csv
grep 881 /tmp/aaa/*.csv
...
grep 920 /tmp/aaa/*.csv
答案 0 :(得分:2)
由于输出是数字(输出行不包含空格),因此可以使用带命令替换的for
循环:
for id in $(grep HxH 20170213.csv | awk -F',' '{print $13}' \
| cut -b 25-27 | sort -u); do
grep $id /tmp/aaa/*.csv
done
另一种选择是使用xargs
:
grep HxH 20170213.csv | awk -F',' '{print $13}' | cut -b 25-27 | sort -u \
| xargs -n1 grep /tmp/aaa/*.csv -e
xargs
变体需要一个人跳过几个箍来做对:
xargs
会将多个模式粘贴到相同的grep
,而使用-n1
会阻止该模式; xargs
将stdin内容指定为命令行中的 last 参数,这是一个问题,因为grep
需要模式然后文件名。幸运的是,grep PATTERN FILES...
拼写为grep FILES... -e PATTERN
,这就是grep
必须跟-e
后的原因。