Как переставить колонки - PullRequest
       16

Как переставить колонки

1 голос
/ 04 октября 2009

В файле, который я переформатирую, я бы хотел, чтобы последний столбец был первым, а остальные столбцы остались прежними. Я мог бы легко сделать это на python, но подумал, что смогу выучить немного awk этим вечером.

Вот пример:

(до)

polk_describes:1 diatribe_that:1 #label#:negative

(после)

#label#:negative polk_describes:1 diatribe_that:1

Однако существует более 3 столбцов. На самом деле количество столбцов варьируется.

Спасибо

SetJmp

Ответы [ 4 ]

4 голосов
/ 04 октября 2009

Вы можете назначать поля и таким образом очищать их:

awk '{ lastfield = $NF; $NF = ""; print lastfield " " $0 }'
1 голос
/ 17 февраля 2011

Вы хотите напечатать $ 0, но удалить последние пару полей? Так же, как вы можете назначить поле для автоматического изменения $ 0, вы можете назначить NF для удаления последних полей.

{ NF = NF - 2 ; print "All but the last two: " $) }
1 голос
/ 04 октября 2009

Вот один из вариантов:

% 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 голосов
/ 04 октября 2009
  print $(NF), $1, $2, $3, $4  # etc. to the max number of columns 

также может быть записано в цикле, который является более элегантным и точным относительно количества столбцов. (также см. трюк Николаса Райли в этом посте, чтобы обрезать последнее поле из $ 0 и напечатать его сразу).

...