【问题标题】:awk: delete the first column and add four columns after the last oneawk:删除第一列并在最后一列之后添加四列
【发布时间】:2014-07-28 04:03:19
【问题描述】:

我有一个文件,其数据表示为:

32446191    0   5   5   2014-06-27  13210
62357877    18  89  89  2014-06-27  13210
33879626    81  1   1   2014-06-27  13210

实际上我有大约 30 列。我需要删除第一列(和分隔符)并在最后一列之后添加四列。那么结果会是:

0   5   5   2014-06-27  13210   0   0   0   0
18  89  89  2014-06-27  13210   0   0   0   0
81  1   1   2014-06-27  13210   0   0   0   0

如何用一个命令在 awk 中完成?感谢您的帮助。

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    保留原始间距:

    $ awk -v OFS='   ' '{sub(/[^[:space:]]+[[:space:]]+/,""); print $0, 0, 0, 0, 0}' file
    0   5   5   2014-06-27  13210   0   0   0   0
    18  89  89  2014-06-27  13210   0   0   0   0
    81  1   1   2014-06-27  13210   0   0   0   0
    

    调整 OFS 以适应。

    【讨论】:

    • 谢谢 Ed,你的解决方案比我的好:awk -F '\t' '{for(i=1;i<=NF;i++)if(i!=1)f=f?f FS $i:$i;print f;f=""}' $fileawk -F '\t' 'BEGIN {OFS = "\t"}{$(NF+1)=$(NF+2)=$(NF+3)=$(NF+4)=0; print}' $file
    【解决方案2】:
    awk '{printf("%-4s%-4s%-4s%-12s%-5s  0  0  0  0\n",$2,$3,$4,$5,$6)}' file
    

    【讨论】:

      【解决方案3】:
      awk '{for(i=2;i<=NF;++i) printf("%-4s ", $i); printf "  0  0  0  0\n"} file
      

      【讨论】:

        【解决方案4】:

        只需打印带有额外 0 的列并使用 column -t:

        awk '{ print $2, $3, $4, $5, $6, 0, 0, 0, 0 }' file | column -t
        

        输出:

        0   5   5   2014-06-27  13210  0  0  0  0
        18  89  89  2014-06-27  13210  0  0  0  0
        81  1   1   2014-06-27  13210  0  0  0  0
        

        对于自定义列:

        awk -v columns='2 3 4 5 6' 'BEGIN { l = split(columns, c); } { t = $c[1]; for (i = 2; i <= l; ++i) t = t OFS $c[i]; print t, 0, 0, 0, 0; t = "" }' file
        

        修改OFS,使用printf,或者直接使用column -t进行格式化。

        【讨论】:

        • 感谢您的回答。我只是更新问题以使其清楚。其实我有很多领域。你有其他方法吗?
        • @Daniel 单独使用 awk 不可能有统一的列输出格式,除非这些列的长度是确定的。
        猜你喜欢
        • 2015-11-04
        • 2013-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多