我有一个数据表示为:
的文件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中执行此操作?感谢您的帮助。
答案 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
进行格式化。