awk:删除第一列并在最后一列之后添加四列

时间:2014-07-28 04:03:20

标签: bash awk

我有一个数据表示为:

的文件
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中执行此操作?感谢您的帮助。

4 个答案:

答案 0 :(得分: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以适应。

答案 1 :(得分:0)

awk '{printf("%-4s%-4s%-4s%-12s%-5s  0  0  0  0\n",$2,$3,$4,$5,$6)}' file

答案 2 :(得分:0)

awk '{for(i=2;i<=NF;++i) printf("%-4s ", $i); printf "  0  0  0  0\n"} file

答案 3 :(得分:0)

只需使用额外的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进行格式化。