Meine Textdatei hat kein Trennzeichen, um nur Leerzeichen anzugeben. Wie schneide ich Spalte 2 aus, um die Datei auszugeben?
39 207 City and County of San Francisc REJECTED MAT = 0
78 412 Cases and materials on corporat REJECTED MAT = 0
82 431 The preparation of contracts an REJECTED MAT = 0
Also Ausgabe, die ich brauche, ist
207
412
432
quelle
cat ... |
ist selten notwendig. Die meisten Unix-Befehle verwenden beispielsweisecut
eine oder mehrere Eingabedateien als Argumente, zcut -d" " -f5 columns.txt
.wie @jimmij sagte,
awk '{print $2}' file
ist die einfachste Antwort.Wenn Sie aus irgendeinem Grund nicht verwenden möchten
awk
und darauf bestehen möchtencut
, können Siesed
jede Instanz von zwei oder mehr Leerzeichen in eine einzelne Registerkarte (cut
das Standardtrennzeichen) konvertieren, bevor Sie sie in cut umleiten:quelle
Sie können weiterhin einzelne Leerzeichen als Trennzeichen verwenden. Sie haben nur mehr Spalten.
cut -d' ' -f
Erhöhen Sie den Wert, den Sie geben, von 2 auf 5 oder vielleicht auf 6. Erhöhen Sie die Zahl, bis Sie die gewünschten Ergebnisse erhalten.quelle
Oben ist sehr nützlich, wenn Linux-Dienstprogramme wie awk für die Datenextraktion nicht funktionieren, wenn Sie in einem Shell-Skript wie dem folgenden zu einem "Root" -Benutzer wechseln:
quelle
awk
in Ihrem Beispiel " nicht funktioniert", ist, dass das Dokument hier nicht in Anführungszeichen gesetzt ist, was bedeutet, dass das Dokument$2
von der Shell auf den zweiten Positionsparameter erweitert wird. Die Lösung besteht wahrscheinlich nicht darin, zu einemgrep
Befehl zu wechseln, sondern entweder dem$
in$2
as\$2
zu entkommen oder einfach das gesamte Dokument mit<<'EOF'
anstelle von zu zitieren<<EOF
. Beachten Sie auch, dass die Aufgabe in Ihrem Beispiel einfacher von ausgeführt wirdpgrep
.