Beides funktioniert offensichtlich nicht unter Windows (zB Git Bash). Verwenden Sie dort die Antwort von @ Mikel (Standardtrennzeichen ist tab, -dArgument einfach weglassen ).
Es ist jedoch wahrscheinlich immer sicherer, solche Flags explizit zu erwähnen, sowohl aus Gründen der Lesbarkeit als auch der Portabilität. Ich kann mir vorstellen, dass einige Leute, die ein cutfür Windows konzipieren, nicht dem vollständigen Standard folgen würden.
Willem Van Onsem
3
Dies sollte als Antwort akzeptiert werden: einfachster Code, einfachste Erklärung.
Du hast
5
Diese Antwort hat mein Leben verändert
matheeeny
1
@WillemVanOnsem: Wenn jemand eine Version von cutfür Windows schreibt und die POSIX-Spezifikation dafür nicht befolgt, gibt es keinen Grund anzunehmen, dass ein POSIX-Skript mit diesem System funktioniert. Halten Sie sich an die POSIX-spezifischen Funktionen. Versuchen Sie nicht, hypothetische zukünftige nicht konforme Implementierungen zuzulassen. Das ist nicht das, was "Portabilität" bedeutet.
Wildcard
12
awk -F '\t''{ print $2 }' inputfile
Dies extrahiert das zweite durch Tabulatoren getrennte Feld jeder Eingabezeile aus inputfile.
Allgemeiner, ohne dass unsichtbare Zeichen erforderlich sind: Verwenden Sie trdiese Option , um die Begrenzer in ein Format zu konvertieren, in dem die Angabe einfacher ist cut.
$ echo -e "a\tb\tc"|tr '\t'' '|cut -d' '-f2
b
tr ist ein einfaches, aber leistungsfähiges Tool zum Abgleichen und Ersetzen von Zeichen.
Aber was ist, wenn der Eingang ist abc(space)def(tab)ghi? Ihre Antwort wird nachgeben def, aber sie sollte nachgeben ghi. In ähnlicher Weise wird ABC(tab)DEF(space)GHIIhre Antwort nachgeben , wenn die Eingabe lautet DEF, aber sie sollte nachgeben DEF(space)GHI.
G-Man
@ G-Man: Der Raumbegrenzer war nur ein Beispiel. Verwenden Sie das für Ihre Daten geeignete Trennzeichen, beispielsweise ein Komma. echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2
26.
... Aber ja, wenn das Trennzeichen ein Tabulator sein muss, dann funktioniert mein Ansatz nicht.
Antworten:
Zwei Wege:
Drücken Sie Ctrl+ Vund dann Tab.
oder schreibe es so:
quelle
-d
Argument einfach weglassen ).ksh93
nicht vonbash
. Das ist von ksh93 unterstützt, zsh, bash, mksh und FreeBSD sh mindestens ( es könnte es machen auf die nächste Haupt Reversion der POSIX - Standard - Spezifikation fürsh
).Tab ist die Standardeinstellung.
Siehe die Manpage cut .
Also solltest du einfach schreiben
quelle
cut
für Windows konzipieren, nicht dem vollständigen Standard folgen würden.cut
für Windows schreibt und die POSIX-Spezifikation dafür nicht befolgt, gibt es keinen Grund anzunehmen, dass ein POSIX-Skript mit diesem System funktioniert. Halten Sie sich an die POSIX-spezifischen Funktionen. Versuchen Sie nicht, hypothetische zukünftige nicht konforme Implementierungen zuzulassen. Das ist nicht das, was "Portabilität" bedeutet.Dies extrahiert das zweite durch Tabulatoren getrennte Feld jeder Eingabezeile aus
inputfile
.quelle
Allgemeiner, ohne dass unsichtbare Zeichen erforderlich sind: Verwenden Sie
tr
diese Option , um die Begrenzer in ein Format zu konvertieren, in dem die Angabe einfacher istcut
.tr
ist ein einfaches, aber leistungsfähiges Tool zum Abgleichen und Ersetzen von Zeichen.quelle
abc(space)def(tab)ghi
? Ihre Antwort wird nachgebendef
, aber sie sollte nachgebenghi
. In ähnlicher Weise wirdABC(tab)DEF(space)GHI
Ihre Antwort nachgeben , wenn die Eingabe lautetDEF
, aber sie sollte nachgebenDEF(space)GHI
.echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2