Frage
In einer Datei Ich bin Neuformatierung, würde ich die letzte Spalte als erste Stelle setzen möchten und haben den Rest der Spalten gleich bleiben. Ich kann dies in Python leicht tun, aber dachte, dass ich an diesem Abend etwas awk lernen würde.
Hier ist ein Beispiel:
(vor)
polk_describes:1 diatribe_that:1 #label#:negative
(nach)
#label#:negative polk_describes:1 diatribe_that:1
Allerdings gibt es viel mehr als 3 Spalten. In der Tat ändert sich die Spaltenanzahl.
Danke,
setjmp
Lösung
Sie können Zuweisungen zu den Feldern machen und sie somit klar:
awk '{ lastfield = $NF; $NF = ""; print lastfield " " $0 }'
Andere Tipps
Hier ist eine Option:
% 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
Wollen Sie $ 0, aber löschen Sie den letzten paar Felder drucken? Genau wie Sie zu einem Feld zuweisen können auf 0 $ automagically zu ändern, können Sie NF zuweisen das letzte Feld (n) zu löschen.
{ NF = NF - 2 ; print "All but the last two: " $) }
print $(NF), $1, $2, $3, $4 # etc. to the max number of columns
kann auch in einer Schleife geschrieben werden, die elegantere und präzise ist, in Bezug auf die Anzahl der Spalten. (Auch Nicholas Riley Trick in diesem Beitrag sehen, das letzte Feld trunkieren von $ 0 und druckt auf einmal).