Grep -f只返回第一场比赛

时间:2012-10-10 07:50:53

标签: bash csv grep

我正在使用遵循基本流程的大型CSV。

  1. 备份工作原件
  2. 生成骨架CSV
  3. 从其他CSV读取,格式化内容,然后将其附加到骨架
  4. 将备份中的数据附加到新数据。
  5. 我遇到的问题是,当我从备份中读取内容时,我正在使用grep -Ev -f一个包含正则表达式的文件来从备份中排除不需要的数据以包含在下一个修订版中。这当前提出了一个问题,因为grep似乎是针对STDIN中的每一行来评估文件中的每个正则表达式,这将导致重复。简单的解决方案是简单地通过sort | uniq管道并将其称为一天,但这将使当前正在使用的csv格式化。我可以根据需要进行详细说明,但缺点是我运行一个脚本来批量处理IP地址,但也有其他人手动编辑文件,并且当前的脚本形式最终输出将是所有自动化内容手动条目位于文件的底部。

    那么,是否有没有一些丑陋的grep循环告诉它在模式匹配后停止评估一条线?使用-m 1将在整个流中的第一个匹配后停止grep,我需要它在每个新行之后停止。

1 个答案:

答案 0 :(得分:0)

对于您想要完成的任务。在我看来,最好使用AWK。您可以在http://www.grymoire.com/Unix/Awk.html找到AWK的优秀教程。您基本上需要使用

更改awk的输入字段分隔符
awk -f',' foo.awk bar.dat

就排序问题而言,请遵循:http://www.linuxquestions.org/questions/linux-general-1/how-to-use-awk-to-sort-243177/