从最后一列复制数据并移入文件中的新列

时间:2019-06-05 13:19:53

标签: shell awk sed cut

如果可能的话,我想将最后一列中的数据移动到文件中具有特定列名的新列中。 我们要移出的最后一列应该为空。

输入:示例文件

Col1,col2,col3,col4
1,abc,test,"Codes:1,2,3,4"
2,xyz,test1,"Codes:12,22,3,4"
3,def,test2,"Codes:1,22,3,41"

输出:

Col1,col2,col3,col4,codes
1,abc,test,,"1,2,3,4"
2,xyz,test1,,"12,22,3,4"
3,def,test2,,"1,22,3,41"

我能够剪切数据,但无法将其移动到新列中

cut -d',' -f12- < file.csv | awk -F":" '{print $2}' | awk -F"\"" '{print $1}'

我不确定这是否也是正确的方法。

4 个答案:

答案 0 :(得分:1)

使用sed:

sed '1s/$/,codes/;s/"Codes:/,"/' <file> 

使用awk:

awk 'BEGIN{FS=OFS=","}NR==1{print $0, "codes"}NR!=1{gsub("Codes:",""); $4 = FS $4; print}' <file>

答案 1 :(得分:1)

$ awk 'NR==1{print $0",codes"; next} {sub(/"[^:]+:/,",\"")} 1' file
Col1,col2,col3,col4,codes
1,abc,test,,"1,2,3,4"
2,xyz,test1,,"12,22,3,4"
3,def,test2,,"1,22,3,41"

答案 2 :(得分:0)

这可能适合您(GNU sed):

sed '1s/$/,codes/;1!s/"Codes:/,"/' file

对于第一行附加,codes,所有其他行将"Codes:替换为,"

答案 3 :(得分:0)

请您尝试以下。

awk '{sub(/\,\"[a-zA-Z]+:/,",,\"")} 1'  Input_file