2009-10-04 135 views
1

在我正在重新格式化的文件中,我想將最後一列作爲第一列,並讓其餘列保持不變。我可以在Python中輕鬆完成這個任務,但是我認爲今晚我會學習一些awk。如何重新排列列

下面是一個例子:

(前)

polk_describes:1 diatribe_that:1 #label#:negative 

(後)

#label#:negative polk_describes:1 diatribe_that:1 

然而,有許多超過3列。實際上列數有所不同。

感謝,

的setjmp

+0

如果您發佈您正在討論的數據的示例,這將非常有幫助。 – NawaMan 2009-10-04 04:28:39

+0

下面是一個例子... 前:polk_describes:1個diatribe_that:1#標籤#:負 期望:#標籤#:負polk_describes:1個diatribe_that:1 然而,也有不少超過3列。實際上列數有所不同。 – SetJmp 2009-10-04 04:35:27

+0

對不起,我在這個問題中增加了這個例子,我可以得到更好的標記。 – SetJmp 2009-10-04 04:39:02

回答

4

您可以分配到田地,從而清除它們:

awk '{ lastfield = $NF; $NF = ""; print lastfield " " $0 }' 
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 
0
print $(NF), $1, $2, $3, $4 # etc. to the max number of columns 

也可以寫在一個循環是更優雅和準確的,關於柱的側向承載力的數量。 (另請參閱Nicholas Riley在本文中的技巧,截斷最後一個字段$ 0並立即打印)。

1

你想打印$ 0,但刪除最後幾場?就像您可以分配給一個字段以自動更改$ 0一樣,您可以分配給NF刪除最後一個字段。

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