GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was macht ein „Feld“ für den Schnittbefehl aus?

Der Begriff „Feld“ wird oft mit Tools wie cut in Verbindung gebracht und awk . Ein Feld würde einer Datenspalte ähneln, wenn Sie die Daten nehmen und sie mit einem bestimmten Zeichen trennen. Typischerweise ist das dafür verwendete Zeichen ein Leerzeichen .

Wie bei den meisten Tools ist es jedoch konfigurierbar. Zum Beispiel:

  • awk =awk -F"," ... - würde durch Kommas getrennt (d.h. , ).
  • Schnitt =cut -d"," ... - würde durch Kommas getrennt (d.h. , ).

Beispiele

Dieses erste zeigt, wie awk wird automatisch auf Leerzeichen aufgeteilt.

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

Dieses zeigt, wie cut wird auch bei Leerzeichen geteilt.

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

Hier haben wir eine CSV-Liste mit Spaltendaten, die wir verwenden cut um die Spalten 1 &4 zurückzugeben.

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

Awk kann das auch:

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

Awk ist auch etwas geschickter im Umgang mit einer Vielzahl von Trennungszeichen. Hier geht es um Tabs zusammen mit Leerzeichen wo sie gleichzeitig gemischt werden:

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

Was ist mit dem Schalter -s zum Ausschneiden?

In Bezug auf diesen Schalter sagt er einfach cut keine Zeilen zu drucken, die das über -d angegebene Trennzeichen nicht enthalten wechseln.

Beispiel

Angenommen, wir hatten diese Datei.

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

HINWEIS: Es gibt Leerzeichen und Tabulatoren in der 2. Zeichenfolge oben.

Wenn wir nun diese Strings mit cut verarbeiten mit und ohne -s Schalter:

$ 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 2. Beispiel sieht man, dass die -s switch hat alle Zeichenfolgen aus der Ausgabe weggelassen, die das Trennzeichen Leerzeichen nicht enthalten .


Ein Feld nach POSIX ist ein beliebiger Teil einer Zeile, die durch eines der Zeichen in IFS begrenzt ist , das "Eingabefeld-Trennzeichen (oder interner Feldtrenner )." Der Standardwert dafür ist Leerzeichen, gefolgt von einem horizontalen Tabulator, gefolgt von einem Zeilenumbruch. Mit Bash können Sie printf '%q\n' "$IFS" ausführen um seinen Wert zu sehen.


Dies hängt vom jeweiligen Dienstprogramm ab, außer für cut , ein "Feld" beginnt am Anfang einer Textzeile und umfasst alles bis zum ersten Tabulator. Das zweite Feld verläuft von dem Zeichen nach dem ersten Tabulator bis zum nächsten Tabulator. Und so weiter für dritte, vierte, ... Alles zwischen Tabulatoren oder zwischen Zeilenanfang und Tabulator oder zwischen Tabulator und Zeilenende.

Es sei denn, Sie geben mit der Option „-d“ ein Feldtrennzeichen an:cut -d: -f2 würde Ihnen alles zwischen dem ersten und dem zweiten Doppelpunkt (':') geben.

Andere Dienstprogramme haben andere Definitionen, aber ein Tabulatorzeichen ist üblich. awk ist ein guter Fallback, wenn cut ist zu streng, wie awk teilt Felder basierend auf einem oder mehreren Leerzeichen. Das ist in vielen Situationen etwas natürlicher, aber Sie müssen ein wenig Syntax beherrschen. Zum Drucken des zweiten Feldes gemäß awk :

awk '{print $2}'

sort ist derjenige, der mich austrickst. Mein aktueller sort Manpage sagt so etwas wie "Übergang von Nicht-Leerzeichen zu Leerzeichen" für ein Feldtrennzeichen. Aus irgendeinem Grund braucht es ein paar Versuche, um sort zu bekommen Felder richtig definiert. join verwendet anscheinend "durch Leerzeichen getrennte" Felder, was awk ist vorgibt standardmäßig zu tun.

Die Moral der Geschichte ist, vorsichtig zu sein und zu experimentieren, wenn man es nicht weiß.


Linux
  1. Nala:Ein hübscheres Frontend für das APT-Kommando

  2. Benötigen Sie das „eingebaute“ Eingebaute?

  3. Standard-Feldtrennzeichen für awk

  4. Was ist das Äquivalent zum Linux-Dateibefehl für Windows?

  5. Wozu dient Linux test -a command test?

Tipps zur Verwendung des Top-Befehls unter Linux

3 Passwort-Manager für die Linux-Kommandozeile

Was ist der Linux-Überwachungsbefehl + Beispiele

Das fc Command Tutorial mit Beispielen für Anfänger

Was ist der Kill-Befehl in Linux?

Wozu dient die Option -o im Befehl useradd?