我有一个包含几列的.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
或者,如果某人有更好的方法来执行此任务,我可以接受建议。
答案 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编码的文件。