我正在尝试使用以下方法将列添加到 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