Erzwingen der Reihenfolge der Ausgabefelder vom Befehl Ausschneiden
-
10-07-2019 - |
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.
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