shell脚本最后添加一个新列

时间:2014-11-21 19:50:52

标签: shell unix csv awk

Input file test.csv 
=================
1,abc, 12,12-19
2,aslk,16,13-143
3,kjsd,45,11-137
4,ajsd,144,10-190

required output:
======================== 
1,abc, 12,12-19,z
2,aslk,16,13-143,z
3,kjsd,45,11-137,z
4,ajsd,144,10-190,z

我正在使用以下命令。

awk -F"," 'BEGIN { OFS = "," } {$5="z"; print}' input.csv > output.csv

但我得到了:

========================
1,abc, 12,12-19
,z
2,aslk,16,13-143
,z
3,kjsd,45,11-137
,z
4,ajsd,144,10-190
,z

请帮助我获得所需的输出。

4 个答案:

答案 0 :(得分:2)

你可以使用这个awk:

awk 'BEGIN { OFS = "," } {print $0, "z"}' input.csv > output.csv

甚至更简单地使用sed

sed 's/$/,z/' input.csv > output.csv

答案 1 :(得分:1)

您的输入文件包含control-Ms,由某些Windows程序完全免费提供。要摆脱它们首先在您的文件上运行dos2unix或类似的,然后运行您的awk脚本。

答案 2 :(得分:0)

使用sed:

sdlcb@ubuntu:~/AMD_C$ sed 's/$/,z/g' input.csv > output.csv
1,abc, 12,12-19,z
2,aslk,16,13-143,z
3,kjsd,45,11-137,z
4,ajsd,144,10-190,z
sdlcb@ubuntu:~/AMD_C$ z=25; sed "s/$/,$z/g" input.csv > output.csv
1,abc, 12,12-19,25
2,aslk,16,13-143,25
3,kjsd,45,11-137,25
4,ajsd,144,10-190,25

使用awk:

sdlcb@ubuntu:~/AMD_C$ awk 'sub(/$/,",z")' input.csv > output.csv
1,abc, 12,12-19,z
2,aslk,16,13-143,z
3,kjsd,45,11-137,z
4,ajsd,144,10-190,z
sdlcb@ubuntu:~/AMD_C$ awk -v z="25" '{sub(/$/,","z)} {print}' input.csv > output.csv
1,abc, 12,12-19,25
2,aslk,16,13-143,25
3,kjsd,45,11-137,25
4,ajsd,144,10-190,25

答案 3 :(得分:0)

这是一个简短的awk

awk '$0=$0",z"' file
1,abc, 12,12-19,z
2,aslk,16,13-143,z
3,kjsd,45,11-137,z
4,ajsd,144,10-190,z