【问题标题】:Updating files using AWK: Why do I get weird newline character after each replacement?使用 AWK 更新文件:为什么每次替换后都会出现奇怪的换行符?
【发布时间】:2016-09-29 00:02:52
【问题描述】:

我有一个包含几列的.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

或者,如果有人有更好的方法来完成这项任务,我愿意接受建议。

【问题讨论】:

  • 你是在 Unix、Windows、...上运行这个吗?

标签: csv awk


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    $ awk 'sub(/\r/,""); ...' file
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2013-08-14
      • 2017-11-20
      • 2011-10-21
      • 2012-04-25
      • 2015-04-23
      相关资源
      最近更新 更多