2017-06-29 6 views
0

awkスクリプトを記述しようとしていますが、ここではAPI応答をキャプチャしています。応答は以下のようになります。上記で一致する正規表現に基づく値を抽出するAwkスクリプト

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 ?} 

私は以下の通りですprofile:login値を印刷したいです。

[email protected] 

これをどのように印刷できますか。このレスポンスは、ユーザーによって異なる場合があります。だから私はprofile.loginに基づいてフィルタリングし、csvファイルの隣に印刷する必要があります。あなたの助けに感謝。

+1

おっと、コードを投稿するのを忘れました! StackOverflowは、人々がコードを修正する手助けをしています。無料のコーディングサービスではありません。どのコードもコードなしより優れています。たとえあなたがそれを書く方法を知らなくても、プログラムがうまくいくと思っていることをメタコードが示してくれます。 – ghoti

答えて

1

このコマンドでそれを行うことができます(tr使用してawk):

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

サンプル:

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] 

それともawkと:

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

サンプル:

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

すごくありがとう! – Krrishv

+1

@A.M.D '-vRS'をうまく使用しています:) – CWLiu

1

awkあなたがファイル内で必要なものを抽出できます。

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

簡単な説明、

  • match($0,/profile:login[^\ ]+/):パターンは$0で正規表現に一致検索、およびRSTARTにおける開始点を保存、RLENGTH
  • substr($0,RSTART+14,RLENGTH-14)}の長さ:サブ文字列を出力以前の不要なパターンを省略します。
+0

ありがとう皆さん、本当に両方の作品があります。驚くばかり。 – Krrishv

関連する問題