gpt4 book ai didi

linux - 如何将排序结果通过管道传递给 grep?

转载 作者:太空宇宙 更新时间:2023-11-04 09:15:08 26 4
gpt4 key购买 nike

$ 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

最佳答案

由于您的输出是数字(输出行不包含空格),您可以使用带有命令替换的 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.

关于linux - 如何将排序结果通过管道传递给 grep?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48796955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com