2017-06-29 3 views
0

Ich versuche, ein awk Skript zu schreiben, wo ich eine API-Antwort erfassen. Die Antwort sieht wie folgt aus.Awk Skript Extrahieren Wert basierend auf passenden Regex

id:0tesss status:ACTIVE created:2016-12-06T13:24:50.000Z activated:2016-12-06T13:26:06.000Z statusChanged:2016-12-06T13:26:06.000Z lastLogin:2017-06-13T06:32:41.000Z lastUpdated:2017-06-13T06:32:58.000Z passwordChanged:null profile:lastName:tack profile:secondEmail:null profile:mobilePhone:null profile:email:[email protected] profile:login:[email protected] profile:firstName:Karry profile:displayName:Karry tack credentials:recovery_question:{question:Who's a ?} 

In der oben Ich möchte nur profile:login Wert drucken, die unten ist.

[email protected] 

Wie kann ich dies drucken. Diese Antwort kann für verschiedene Benutzer variieren. Also muss ich basierend auf profile.login filtern und die nächste auf eine CSV-Datei drucken. Schätze deine Hilfe.

+1

Hoppla, Sie haben vergessen, Ihren Code zu posten! StackOverflow hilft Leuten, ihren Code zu reparieren. Es ist kein kostenloser Kodierungsdienst. Jeder Code ist besser als gar kein Code. Meta-Code, sogar, wird zeigen, wie Sie denken, dass ein Programm funktionieren sollte, auch wenn Sie nicht wissen, wie man es schreibt. – ghoti

Antwort

1

Sie können es mit diesem Befehl tun (mit tr und awk):

tr ' ' '\n' | awk -F: '/profile:login/{print $NF}' 

Probe:

AMD$ echo "id:0tesss status:ACTIVE created:2016-12-06T13:24:50.000Z activated:2016-12-06T13:26:06.000Z statusChanged:2016-12-06T13:26:06.000Z lastLogin:2017-06-13T06:32:41.000Z lastUpdated:2017-06-13T06:32:58.000Z passwordChanged:null profile:lastName:tack profile:secondEmail:null profile:mobilePhone:null profile:email:[email protected] profile:login:[email protected] profile:firstName:Karry profile:displayName:Karry tack credentials:recovery_question:{question:Who's a ?}" | tr ' ' '\n' | awk -F: '/profile:login/{print $NF}' 
[email protected] 

Oder mit nur awk:

awk -vRS=' ' '/profile:login/{sub(/.*:/, ""); print}' 

Probe:

AMD$ echo "id:0tesss status:ACTIVE created:2016-12-06T13:24:50.000Z activated:2016-12-06T13:26:06.000Z statusChanged:2016-12-06T13:26:06.000Z lastLogin:2017-06-13T06:32:41.000Z lastUpdated:2017-06-13T06:32:58.000Z passwordChanged:null profile:lastName:tack profile:secondEmail:null profile:mobilePhone:null profile:email:[email protected] profile:login:[email protected] profile:firstName:Karry profile:displayName:Karry tack credentials:recovery_question:{question:Who's a ?}" | awk -vRS=' ' '/profile:login/{sub(/.*:/, ""); print}' 
[email protected] 
+0

Danke Jungs super! – Krrishv

+1

@ A.M.D gute Verwendung von '-VRS' :) – CWLiu

1

awk kann extrahieren, was Sie in der Datei gewünscht.

$ awk '{match($0,/profile:login[^\ ]+/);print substr($0,RSTART+14,RLENGTH-14)}' file 
[email protected] 

Kurze Erklärung,

  • match($0,/profile:login[^\ ]+/): Finden Sie das Muster in der $0 die Regex übereinstimmen, und speichern Sie den Startpunkt in RSTART, die Länge in RLENGTH
  • substr($0,RSTART+14,RLENGTH-14)}: drucken Sie die Unterkette die das vorherige unerwünschte Muster weglassen
+0

Vielen Dank, wirklich Jungs, beide funktioniert. Genial. – Krrishv

Verwandte Themen