Was stellt ein „Feld“ für den Ausschneidebefehl dar?

Was stellt ein „Feld“ für den Ausschneidebefehl dar?

Beispielsweise cutkann der Befehl den Parameter -f annehmen, der gemäßman

Wählen Sie nur diese Felder aus. Drucken Sie auch alle Zeilen, die kein Trennzeichen enthalten, sofern nicht die Option -s angegeben ist.

Was ist in diesem Zusammenhang ein Feld?

Antwort1

Der Begriff „Feld“ wird oft mit Tools wie cutund in Verbindung gebracht awk. Ein Feld entspricht einer Datenspalte, wenn Sie die Daten mit einem bestimmten Zeichen trennen. Normalerweise wird hierfür ein verwendet Space.

Wie die meisten Tools ist es jedoch konfigurierbar. Beispiel:

  • awk = awk -F"," ...- würde durch Kommas trennen (also ,).
  • cut = cut -d"," ...- würde durch Kommas trennen (also ,).

Beispiele

Das erste zeigt, wie awkautomatisch nach Leerzeichen aufgeteilt wird.

$ echo "The rain in Spain." | awk '{print $1" "$4}'
The Spain.

Dieses zeigt cutauch, wie die Aufteilung in Leerzeichen erfolgt.

$ echo "The rain in Spain." | cut -d" " -f1,4
The Spain.

Hier haben wir eine CSV-Liste mit Spaltendaten, die wir verwenden, cutum die Spalten 1 und 4 zurückzugeben.

$ echo "col1,col2,col3,co4" | cut -d"," -f1,4
col1,co4

Auch Awk kann dies:

$ echo "col1,col2,col3,co4" | awk -F"," '{print $1","$4}'
col1,co4

Awk kann auch etwas besser mit einer Vielzahl von Trennzeichen umgehen. Hier geht es darum, sie gleichzeitig zu verarbeiten Tabsund zu verwenden:Spaces

$ echo -e "The\t rain\t\t in Spain." | awk '{print $1" "$4}'
The Spain.

Was ist mit dem Schalter -s zum Ausschneiden?

Dieser Schalter weist Sie lediglich an, cutkeine Zeilen zu drucken, die nicht das über den Schalter angegebene Trennzeichen enthalten -d.

Beispiel

Angenommen, wir hätten diese Datei.

$ cat sample.txt 
This is a space string.
This is a space   and   tab string.
Thisstringcontainsneither.

NOTIZ:In der zweiten Zeichenfolge oben befinden sich Leerzeichen und Tabulatoren.

cutWenn wir diese Zeichenfolgen nun mit und ohne Schalter verarbeiten -s:

$ cut -d" " -f1-6 sample.txt 
This is a space string.
This is a space  
Thisstringcontainsneither.

$ cut -d" " -f1-6 -s sample.txt 
This is a space string.
This is a space  

Im zweiten Beispiel können Sie sehen, dass der -sSchalter alle Zeichenfolgen aus der Ausgabe ausgelassen hat, die nicht das Trennzeichen enthalten Space.

Antwort2

Ein Feld ist gemäß POSIX jeder Teil einer Zeile, der durch eines der Zeichen inIFS, Die "Eingabefeld-Trennzeichen(oderinterner Feldtrenner)." Der Standardwert hierfür ist ein Leerzeichen, gefolgt von einem horizontalen Tabulator, gefolgt von einer neuen Zeile. Mit Bash können Sie printf '%q\n' "$IFS"den Wert anzeigen, indem Sie ihn ausführen.

Antwort3

Dies hängt vom jeweiligen Dienstprogramm ab, aber für cutbeginnt ein „Feld“ am Anfang einer Textzeile und umfasst alles bis zum ersten Tabulator. Das zweite Feld reicht vom Zeichen nach dem ersten Tabulator bis zum nächsten Tabulator. Und so weiter für das dritte, vierte, … Alles zwischen Tabulatoren oder zwischen Zeilenanfang und Tabulator oder zwischen Tabulator und Zeilenende.

Sofern Sie mit der Option „-d“ kein Feldtrennzeichen angeben, cut -d: -f2erhalten Sie alles zwischen dem ersten und zweiten Doppelpunkt (:).

Andere Dienstprogramme haben andere Definitionen, aber ein Tabulatorzeichen ist üblich. awkist ein guter Ersatz, wenn cutzu streng ist, da awkFelder basierend auf einem oder mehreren Leerzeichen unterteilt werden. Das ist in vielen Situationen etwas natürlicher, aber Sie müssen ein bisschen Syntax kennen. So drucken Sie das zweite Feld gemäß awk:

awk '{print $2}'

sortist das, was mich täuscht. Auf meiner aktuellen sortManpage steht so etwas wie „Übergang von nicht leer zu leer“ für einen Feldtrenner. Aus irgendeinem Grund braucht es mehrere Versuche, um sortdie Felder richtig zu definieren. joinverwendet anscheinend „durch Leerzeichen getrennte“ Felder, was awkangeblich standardmäßig der Fall ist.

Die Moral der Geschichte ist: Seien Sie vorsichtig und experimentieren Sie, wenn Sie es nicht wissen.

Antwort4

Wenn Sie cutden Befehl verwenden, benötigt er zwei Hauptargumente

-d: steht für Trennzeichen

-f: steht für das aus der Eingabedatei auszuschneidende Feld

Ex. cut - d "|"  - f1, 2 input_filename

Hier outputwürden sie durch das Trennzeichen "|" getrennt und es würden nur 2 Felder aus der Eingabedatei ausgeschnitten.

Wenn Ihre Datei die folgenden Zeilen enthält

Alex|120000|Admin|1999

Dann werden 2 Felder geschnitten, die

Alex|120000

verwandte Informationen