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

War es hilfreich?

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top