如何重新排列列

时间:2009-10-04 04:23:38

标签: awk gawk

在我正在重新格式化的文件中,我想将最后一列作为第一列,并使其余列保持不变。我可以在python中轻松地做到这一点,但我想今晚我会学到一些awk。

以下是一个例子:

(前)

polk_describes:1 diatribe_that:1 #label#:negative

(后)

#label#:negative polk_describes:1 diatribe_that:1

但是,有超过3列。事实上,列数会有所不同。

谢谢,

的setjmp

4 个答案:

答案 0 :(得分:4)

您可以对字段进行分配,从而清除它们:

awk '{ lastfield = $NF; $NF = ""; print lastfield " " $0 }'

答案 1 :(得分:1)

这是一个选项:

% echo 'polk_describes:1 diatribe_that:1 #label#:negative' | \
  awk '{ print $NF " " substr($0, 1, length($0) - length($NF)) }'
#label#:negative polk_describes:1 diatribe_that:1 

答案 2 :(得分:1)

您想要打印$ 0但删除最后几个字段吗?就像你可以分配给一个字段来自动更改$ 0一样,你可以分配给NF来删除最后一个字段。

{ NF = NF - 2 ; print "All but the last two: " $) }

答案 3 :(得分:0)

  print $(NF), $1, $2, $3, $4  # etc. to the max number of columns 
对于colums的数量,也可以用更优雅和精确的循环编写

。 (另请参阅Nicholas Riley在这篇文章中的技巧,将$ 0中的最后一个字段截断并立即打印出来。)

相关问题