在我正在重新格式化的文件中,我想将最后一列作为第一列,并让其余列保持不变。我可以在Python中轻松完成这个任务,但是我认为今晚我会学习一些awk。如何重新排列列
下面是一个例子:
(前)
polk_describes:1 diatribe_that:1 #label#:negative
(后)
#label#:negative polk_describes:1 diatribe_that:1
然而,有许多超过3列。实际上列数有所不同。
感谢,
的setjmp
在我正在重新格式化的文件中,我想将最后一列作为第一列,并让其余列保持不变。我可以在Python中轻松完成这个任务,但是我认为今晚我会学习一些awk。如何重新排列列
下面是一个例子:
(前)
polk_describes:1 diatribe_that:1 #label#:negative
(后)
#label#:negative polk_describes:1 diatribe_that:1
然而,有许多超过3列。实际上列数有所不同。
感谢,
的setjmp
您可以分配到田地,从而清除它们:
awk '{ lastfield = $NF; $NF = ""; print lastfield " " $0 }'
这里有一个选项:
% 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
print $(NF), $1, $2, $3, $4 # etc. to the max number of columns
也可以写在一个循环是更优雅和准确的,关于柱的侧向承载力的数量。 (另请参阅Nicholas Riley在本文中的技巧,截断最后一个字段$ 0并立即打印)。
你想打印$ 0,但删除最后几场?就像您可以分配给一个字段以自动更改$ 0一样,您可以分配给NF删除最后一个字段。
{ NF = NF - 2 ; print "All but the last two: " $) }
如果您发布您正在讨论的数据的示例,这将非常有帮助。 – NawaMan 2009-10-04 04:28:39
下面是一个例子... 前:polk_describes:1个diatribe_that:1#标签#:负 期望:#标签#:负polk_describes:1个diatribe_that:1 然而,也有不少超过3列。实际上列数有所不同。 – SetJmp 2009-10-04 04:35:27
对不起,我在这个问题中增加了这个例子,我可以得到更好的标记。 – SetJmp 2009-10-04 04:39:02