Frage

Ich möchte etwas tun:

cat abcd.txt | cut -f 2,1 

und ich möchte, dass die Ordnung 2 und dann 1 in der Ausgabe zu sein. Auf der Maschine teste ich (FreeBSD 6), dies geschieht nicht (sein Druck in 1,2 Reihenfolge). Können Sie mir sagen, wie dies zu tun?

Ich weiß, ich kann immer einen Shell-Skript schreibt diese Umkehr zu tun, aber ich bin auf der Suche nach etwas mit den ‚schneiden‘ Befehlsoptionen.

Ich glaube, ich bin mit Version 5.2.1 von coreutils mit schneiden.

War es hilfreich?

Lösung

Das kann nicht mit cut erfolgen. Nach der Manpage:

  

Die gewählte Eingang wird in der gleichen Reihenfolge geschrieben, dass es gelesen wird, und ist   geschrieben genau einmal.

Patchen cut hat vorgeschlagen viele mal , sondern auch kompletter Patches abgelehnt worden.

Stattdessen können Sie es tun awk verwenden, wie folgt aus:

awk '{print($2,"\t",$1)}' abcd.txt

Setzen Sie die \t mit dem, was Sie verwenden als Feldtrennzeichen.

Andere Tipps

Lars' Antwort war toll, aber ich fand eine noch bessere. Das Problem mit dem ist sie paßt \ t \ t, da keine Spalten. Um dies zu beheben Verwenden Sie die folgenden:

awk -v OFS="  " -F"\t" '{print $2, $1}' abcd.txt

Dabei gilt:

-F"\t" ist, was zu schneiden auf genau (Tabs).

-v OFS=" " ist, was mit trennen (zwei Räume)

Beispiel:

echo 'A\tB\t\tD' | awk -v OFS="    " -F"\t" '{print $2, $4, $1, $3}'

Diese Ausgänge:

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