Die Ausgabe von cut -f verstehen

Die Ausgabe von cut -f verstehen

Vielen Dank für Ihre Geduld. Ich bin neu bei Linux und brauchte etwas Hilfe, um zu verstehen, wie ich die Ausgabe des Cut-Befehls analysieren kann.

Ich habe derzeit eine Variable

x=$(discover nginx --human=nood | cut -f1,6)

Meine Ausgabe ist also echo "$xeine Liste mit

Instanz-ID IP-Adresse

In meinem Programm möchte ich eine For-Schleife über jede Zeile von x laufen lassen und die erste und die zweite Variable separat extrahieren. Beispiel: Wenn es ein Array wäre, wäre a[0] = instanceID und a[1]= IP-Adresse

Kann mir bitte jemand erklären, wie ich die Elemente einzeln extrahieren kann? Ich weiß, dass ich eine Schleife ausführen $xund darin einen Schnitt machen kann, aber ich möchte herausfinden, ob es dafür eine bessere Möglichkeit gibt.

Antwort1

Dazu müssen Sie die Daten überhaupt nicht in einer Variablen speichern, eine Schleife über die Ausgabe discoverreicht aus:

discover nginx --human=nood | cut -f 1,6 |
while read -r instanceID IPAddress; do
    # Use "$instanceID" and "$IPAddress" here
done

Alternativ können Sie in bashoder einer Shell, die Prozesssubstitutionen ( <( ... )) versteht, Folgendes tun:

while read -r instanceID IPAddress; do
    # Use "$instanceID" and "$IPAddress" here
done < <( discover nginx --human=nood | cut -f 1,6 )

Der Unterschied zwischen diesen beiden ist nur sichtbar, wenn Sie die Werte einer Variablen übertragen möchtenaus der Schleife. Im ersten Beispiel wird die Schleife in einer Subshell ausgeführt und Sie würden daher keine Werte von Variablen verwenden, die innerhalb der Schleife gesetzt werdennachdie Schleife (sie existiert in ihrer eigenen lokalen Umgebung).

Im zweiten Beispiel sind keine Sub-Shells beteiligt (außer der, die die Prozessersetzung mit discoverund ausführt cut), daher sind die Variablenwerte auch nach der Schleife zugänglich.

verwandte Informationen