Domanda

In un file sto riformattazione, vorrei mettere l'ultima colonna come il primo e avere il resto delle colonne rimangono le stesse. Ho potuto farlo facilmente in Python, ma ho pensato di imparare un po 'awk questa sera.

Ecco un esempio:

(prima)

polk_describes:1 diatribe_that:1 #label#:negative

(dopo)

#label#:negative polk_describes:1 diatribe_that:1

Tuttavia, ci sono molti più di 3 colonne. In realtà il numero di colonne varia.

Grazie,

setjmp

È stato utile?

Soluzione

È possibile effettuare le assegnazioni ai campi, e quindi risolverli:

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

Altri suggerimenti

Ecco una sola opzione:

% 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 

Vuoi print $ 0, ma cancellare l'ultimo paio di campi? Proprio come è possibile assegnare ad un campo per modificare $ 0 automagicamente, è possibile assegnare a NF per eliminare l'ultimo campo (s).

{ NF = NF - 2 ; print "All but the last two: " $) }
  print $(NF), $1, $2, $3, $4  # etc. to the max number of columns 

può anche essere scritta in un ciclo che è più elegante e precisa, per quanto riguarda il numero di colonne. (Vedi anche il trucco di Nicholas Riley in questo post, per troncare l'ultimo campo di $ 0 e la stampa in una sola volta).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top