2013-10-07 80 views
1

我想使用sed将一些列添加到具有默认值的下面的csv文件中。将具有默认值的列添加到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的命令来获取所需的输出?

+0

一个单一的'sed'命令可能不足以将所有这些字段添加到您的CSV。 – icedwater

回答

9
$ 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

这是一系列基于这里的例子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" } 
+0

是的,我有更多的案例。 – Xianlin

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”。

相关问题