我正在处理一个遵循基本流程的大型CSV。
- 备份工作原件
- 生成骨架CSV
- 从另一个CSV读取,格式化内容,然后将其附加到骨架
- 将备份中的数据附加到新数据中
我遇到的问题是,当我从备份中读取内容时,我将grep -Ev -f
与包含正则表达式的文件一起使用,以从备份中排除不需要的数据,从而将其包含在下一个修订版中。这目前带来了一个问题,因为grep似乎会根据STDIN中的每一行来评估文件中的每个regex,这将导致重复。简单的解决方案是简单地通过sort | uniq
进行管道传输,然后结束一天,但这会影响当前使用的csv的格式。如果需要,我可以详细说明,但简而言之,我运行了一个脚本来批量处理IP地址,但也有其他人手动编辑文件,根据脚本的当前形式,最终输出将是所有自动内容,手动条目位于文件底部。
那么,是否有一些grep的丑陋循环来告诉它在匹配模式后停止评估行呢?使用-m 1
将在整个流中的第一个匹配之后停止grep,我需要它在每个新行之后停止。
用于您想要完成的任务。在我看来,最好使用AWK。您可以在以下位置找到AWK的优秀教程:http://www.grymoire.com/Unix/Awk.html.您基本上需要使用更改awk的输入字段分隔符
awk -f',' foo.awk bar.dat
就排序问题而言,如下所示:http://www.linuxquestions.org/questions/linux-general-1/how-to-use-awk-to-sort-243177/