使用AWK更新文件:为什么每次更换后都会出现奇怪的换行符?

时间:2016-09-29 00:02:53

标签: csv awk

我有一个包含几列的.csv。其中一列需要在~1000个文件中更新为相同的数字。我尝试使用AWK编辑每个文件,但我没有得到预期的结果。

  

原始.csv看起来像什么

heading_1,heading_2,heading_3,heading_4
a,b,c,1
d,e,f,1
g,h,i,1
j,k,m,1

我尝试将第4列从1更新为15

awk '$4="15"' FS=, OFS=, file > update.csv

当我在excel中生成的.csv上运行此操作时,结果是在第一行(它更新为^M)之后的换行15字符,然后它终止并执行不更新任何其他列。

在运行目录中的所有文件时,它会在每个文件上重复相同的错误。

for file in *.csv; do awk '$4="15"' FS=, OFS=, $file > $file"_updated>csv"; done

或者,如果某人有更好的方法来执行此任务,我可以接受建议。

2 个答案:

答案 0 :(得分:3)

Excel正在生成控件-Ms,而不是awk。在运行awk之前,在文件上运行dos2unix或类似文件。

答案 1 :(得分:0)

好吧,我无法在我的linux中重现你的问题,因为写15到最后一列会覆盖\r^M实际上是0x0D或{{1} })在换行符\r之前,但您可以随时首先删除\n

\r

我在使用不同语言环境的文件中处理非ASCII字符时遇到了一些问题,例如,在UTF8 shell中使用Gnu awk处理了ISO-8859-1编码的文件。