awk 无意中删除逗号

awk 无意中删除逗号

我正在使用以下数据结构操作文本文件中的数据:

"1111","2222","3333","4444","5555","6666","7777","2017/12/15 16:26:00"

我正在尝试将日期中的“/”更改为“-”。这是我的 awk 命令:

awk -F "," '{gsub("/", "-", $8); print}' my-input.txt

它成功地更改了 /,但产生了用 ' ' 空格字符替换 ',' 逗号的意外后果:

"1111" "2222" "3333" "4444" "5555" "6666" "7777" "2017-12-15 16:26:00"

有谁知道为什么会发生这种情况?

答案1

正如 taliezin 和 pfnuesel 所指出的,当将输入文件分隔符定义为“,”时,还需要将输出文件分隔符定义为“,”以保留它。如果省略输出文件分隔符并且已对现有字段进行修改,则 awk 将使用默认值,在本例中为 ' ' [空格] 字符。

以下是更正后的 awk 命令:

awk -F "," -v OFS="," '{gsub("/", "-", $8); print}' my-input.txt

它输出维持“,”的预期结果:

"1111","2222","3333","4444","5555","6666","7777","2017-12-15 16:26:00"

答案2

既然需求是“将日期中的‘/’改为‘-’”,就是简单的字符替换,为什么不使用sed呢? sed 's///-/g' my-input.txt

相关内容