Ich habe eine Menge verschiedener Arten von Dateien, die ich regelmäßig betrachten muss, und was sie gemeinsam haben, ist, dass die Zeilen eine Menge key=value
type Strings enthalten. So etwas wie:
Ich würde gerne in der Lage sein, direkt von awk auf die Namen zu verweisen ... so etwas wie:
%Vor%Wie kann ich das tun?
Am ehesten ist es möglich, die Variablen zuerst in jeder Zeile in ein assoziatives Array zu zerlegen. Das heißt,
%Vor%Lesbarer:
%Vor%Oder vermeiden Sie den nutzlosen Gebrauch von cat:
%Vor% sed -r 's/[[:alnum:]]+=/\n&/g'
Dies platziert jeden Schlüssel, jedes Wertpaar in einer eigenen Zeile.
awk -F= '=="Var"{print }'
Dies liest die Schlüssel-Wert-Paare. Da das Feldtrennzeichen =
ist, endet der Schlüssel als Feld 1 und der Wert als Feld 2. Daher suchen wir nur nach Zeilen, deren erstes Feld Var
ist, und geben den entsprechenden Wert aus.
Da die Diskussion im Kommentar deutlich gemacht hat, dass eine pure-bash-Lösung auch akzeptabel wäre:
%Vor% Das <<<"Input Here"
könnte auch <file.txt
sein, in diesem Fall würden Zeilen in der Datei durchlaufen.
Wenn Sie $Var
anstelle von ${vars[Var]}
verwenden möchten, ersetzen Sie printf -v "${word%%=*}" %s "${word*=}"
anstelle von vars[${word%%=*}]=${word#*=}
und entfernen Sie Verweise auf vars
an anderer Stelle. Beachten Sie, dass dies keine gute Möglichkeit bietet, Variablen zwischen Eingabezeilen zu bereinigen, wie dies beim assoziativen Array-Ansatz der Fall ist.
Ich weiß, dass dies besonders in Bezug auf awk ist, aber ich erwähne dies, da viele Leute hier nach Lösungen suchen, um Name = Wert-Paare (mit / ohne awk als solche) zu zerlegen.
Ich fand unten einfach einfache und sehr effektiv in der Verwaltung mehrerer Leerzeichen / Kommas -
Quelle: Ссылка
%Vor%