【问题标题】:Copy data from last column and move into new column in a file从最后一列复制数据并移动到文件中的新列
【发布时间】:2019-10-21 00:20:11
【问题描述】:

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

输入:示例文件

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}'

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

【问题讨论】:

  • 试试sed '1{s/$/,codes/;b};s/"Codes:/,"/' file

标签: shell awk sed cut


【解决方案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>

【讨论】:

    【解决方案2】:
    $ 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"
    

    【讨论】:

      【解决方案3】:

      这可能对你有用(GNU sed):

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

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

      【讨论】:

        【解决方案4】:

        请您尝试关注一下。

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

        【讨论】:

          猜你喜欢
          • 2022-06-28
          • 1970-01-01
          • 2011-12-08
          • 1970-01-01
          • 1970-01-01
          • 2014-02-06
          • 1970-01-01
          • 2019-12-07
          • 2022-12-06
          相关资源
          最近更新 更多