如何使用awk将列插入CSV文件

时间:2013-10-07 08:50:52

标签: csv sed awk

我想使用sed将一些列添加到具有默认值的下面的csv文件中。

我的文件就像:

40,2012-05-30,London,61,Sunny
41,2012-02-22,Moscow,11,Snow
54,2012-04-10,Tokyo,02,Sunny

我希望输出为:

40,2012-05-30,NULL,London,NULL,NULL,61,Sunny,Tom
41,2012-02-22,NULL,Moscow,NULL,NULL,11,Sunny,Tom
54,2012-04-10,NULL,Tokyo,NULL,NULL,02,Sunny,Tom

获得所需输出的最佳sed或awk命令是什么?

3 个答案:

答案 0 :(得分:12)

$ awk '{print $1,F,$2,F,F,$3,$4,$5,"Tom"}' FS=, OFS=, F='NULL' file
40,NULL,2012-05-30,NULL,NULL,London,61,Sunny,Tom
41,NULL,2012-02-22,NULL,NULL,Moscow,11,Snow,Tom
54,NULL,2012-04-10,NULL,NULL,Tokyo,02,Sunny,Tom

答案 1 :(得分:1)

这是基于以下示例的一系列sed命令:

s/31,/31,NULL,/;
s/,01/NULL,NULL,01/;
s/.$/,Tom/

至于awk,也许您可​​以先插入字段并稍后更新:

BEGIN { FS="," }
{ print $1","$2",NULL,"$3",NULL,NULL,"$4","$5",Tom" }

答案 2 :(得分:0)

如果你只是添加你显示的字段,那么这样的事情很好:

$ awk 'BEGIN{FS=OFS=","} {$3="NULL,"$3",NULL,NULL"; $0=$0",Tom"} 1' file
40,2012-05-30,NULL,London,NULL,NULL,61,Sunny,Tom
41,2012-02-22,NULL,Moscow,NULL,NULL,11,Snow,Tom
54,2012-04-10,NULL,Tokyo,NULL,NULL,02,Sunny,Tom

但是如果你做的不止于此,那么可能有一个更好的解决方案,包括移动字段和循环填充空字段“NULL”的结果。