awk parse out Schlüssel = Wert Paare in Variablen

8

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:

%Vor%

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?

    
Barry 17.03.2015, 20:20
quelle

4 Antworten

8

Am ehesten ist es möglich, die Variablen zuerst in jeder Zeile in ein assoziatives Array zu zerlegen. Das heißt,

%Vor%

Lesbarer:

%Vor%     
Wintermute 17.03.2015 20:35
quelle
3
%Vor%

Oder vermeiden Sie den nutzlosen Gebrauch von cat:

%Vor%

Wie es funktioniert

  • 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.

John1024 17.03.2015 21:22
quelle
3

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.

    
Charles Duffy 17.03.2015 22:05
quelle
0

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%     
prash 25.09.2017 06:42
quelle

Tags und Links