如何将排序结果输出到grep?

时间:2018-02-14 21:59:42

标签: linux

$ 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

1 个答案:

答案 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后的原因。