使用 awk 添加列时出现问题

使用 awk 添加列时出现问题

我正在尝试使用以下方法将列添加到 csv 文件:

awk -F "," '{print $0"new_col"}' file.csv

但我得到了:

new_col8,0.405,0.101
new_col4,0.374,0.100
new_col23,0.342,0.100
new_col130,0.298,0.100

代替 :

68,110,0.362,0.101,new_col
11,98,0.405,0.101,new_col
57,94,0.374,0.100,new_col
61,123,0.342,0.100,new_col
124,130,0.298,0.100,new_col

我也尝试过这样的:

awk -F "," '{{$(NF+1)=",new_col"} print $0 }' file.csv

但我得到了同样的结果!

有人已经遇到这个问题了吗?

答案1

您的输入csv文件是 DOS 格式。 Microsoft DOS/Windows 在每行末尾使用回车符(\r^M、 ASCII 代码 13),后跟换行符(\n^J或 ASCII 代码 10),而 Linux/Unix 仅使用换行符。

要解决此问题,请运行:

$ dos2unix file.csv
dos2unix: converting file file.csv to Unix format ... 
$ awk '{print $0",new_col"}' file.csv

注意前面的逗号new_col。如果没有它,则直接print连接new_col到 的末尾$0。无需表示字段分隔符 ( -F),因为您没有将输入行拆分为字段 - 您仅使用$0.

答案2

如果.csv是 DOS 格式,另一个选项可能是:

tr -d \\r <input.csv | sed 's/$/,new_col/'

...这将一次性解决所有问题。

答案3

这行得通吗?awk -F, '{$(NF+1)="new_col";}1' OFS=, input.txt

这将在命令行中输出新表。在示例中,我添加了一个输出文件(output.csv以防万一)。

运行命令之前:

$ cat input.csv
68,110,0.362,0.101
11,98,0.405,0.101
57,94,0.374,0.100
61,123,0.342,0.100
124,130,0.298,0.100

执行命令:

$ awk -F, '{$(NF+1)="new_col";}1' OFS=, input.csv > output.csv

检查输出文件:

$ cat output.csv
68,110,0.362,0.101,new_col
11,98,0.405,0.101,new_col
57,94,0.374,0.100,new_col
61,123,0.342,0.100,new_col
124,130,0.298,0.100,new_col

示例页面

相关内容