【问题标题】:How to rearrange columns如何重新排列列
【发布时间】:2016-12-11 22:54:12
【问题描述】:

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

这是一个例子:

(之前)

polk_describes:1 diatribe_that:1 #label#:negative

(之后)

#label#:negative polk_describes:1 diatribe_that:1

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

谢谢,

SetJmp

【问题讨论】:

    标签: awk gawk


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这是一种选择:

      % 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 
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:
            print $(NF), $1, $2, $3, $4  # etc. to the max number of columns 
          

          也可以写在一个更优雅和精确的循环中,关于列的数量。 (另请参阅本文中 Nicholas Riley 的技巧,将最后一个字段从 $0 中截断并立即打印)。

          【讨论】:

            猜你喜欢
            • 2011-02-25
            • 2012-09-02
            • 2017-12-19
            • 1970-01-01
            • 1970-01-01
            • 2021-12-24
            • 2020-04-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多