awk 无意中删除了逗号

Gus*_*ler 7 awk text-processing text-formatting

我正在从具有以下数据结构的文本文件中操作数据:

"1111","2222","3333","4444","5555","6666","7777","2017/12/15 16:26:00"
Run Code Online (Sandbox Code Playgroud)

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

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

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

"1111" "2222" "3333" "4444" "5555" "6666" "7777" "2017-12-15 16:26:00"
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会这样?

Gus*_*ler 16

正如 taliezin 和 pfnuesel 所指出的,在将输入文件分隔符定义为 ',' 时,还需要将输出文件分隔符定义为 ',' 以保留它。如果省略了输出文件分隔符并对现有字段进行了修改,awk 将使用默认值,在这种情况下是一个 ' ' [空格] 字符。

以下是更正后的 awk 命令:

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

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

"1111","2222","3333","4444","5555","6666","7777","2017-12-15 16:26:00"
Run Code Online (Sandbox Code Playgroud)

  • 更具体地说:如果激发 `awk` 重新形成其字段,则需要定义输出文件分隔符。当您修改字段时会发生这种情况。如果未对现有字段进行修改,则将保留分隔符。 (4认同)