次のような多くの行を含むログファイルがあります。
2017-07-16 01:06:07 | 8801624874139 | http://192.168.5.1:2020/credit/purchase/4 | XpressLoan | {"resultCode":0,"resultMessage":"OK","amount":100000,"serviceFee":24400,"totalOutstandingdebt":124400,"msisdn":8801624874139}
2017-07-16 01:06:24 | 8801628666938 | http://192.168.5.1:2020/credit/purchase/5 | XpressLoan | {"resultCode":0,"resultMessage":"OK","amount":50000,"serviceFee":12180,"totalOutstandingdebt":62180,"msisdn":8801628666938}
上記のログから金額の値をどのように取得できますか?
予想出力:
100000
50000
答え1
組み合わせの使用アッ+ジャック(JSON操作ツール):
awk '{ print $10 }' logfile | jq -r '.amount'
出力:
100000
50000
このアプローチを使用すると、JSONエンコードフィールドから任意の/複数のキー/値を抽出できます。
答え2
この試み:
$ awk -F\" '/amount/ {print $9}' file | sed 's/[:|,]//g'
100000
50000
または:
$ sed 's/^.*amount\":\([0-9]*\),\".*$/\1/' file
100000
50000
編集する
最初のコマンドを awk に再パイプすると、次の例のように、最初のコマンドの出力を要約できます。
$ awk -F\" '/amount/ {print $9}' file | sed 's/[:|,]//g' |\
awk '{sum += $1} END {print sum}'
150000
答え3
awk
必要なデータを取得するには、いくつか使用できます。
awk -F"|" {'print $5'}| awk -F"," '{print $3}'| awk -F":" '{print $2}'
{}
最初のawkはデータを提供します- 2番目のawkはあなたに与えるでしょう
key:value
- 3番目のawkはキーの値を提供します。
フォーマットが変更されても、区切り文字でパターンを認識し、それに合わせて調整する必要があります。
たとえば、
my_var="2017-07-16 01:06:07 | 8801624874139 | http://192.168.5.1:2020/credit/purchase/4 | XpressLoan | {"resultCode":0,"resultMessage":"OK","amount":100000,"serviceFee":24400,"totalOutstandingdebt":124400,"msisdn":8801624874139}"
$ echo $my_var | awk -F"|" {'print $5'}
{resultCode:0,resultMessage:OK,amount:100000,serviceFee:24400,totalOutstandingdebt:124400,msisdn:8801624874139}
$ echo $my_var | awk -F"|" {'print $5'}| awk -F"," '{print $4}'
serviceFee:24400
$ echo $my_var | awk -F"|" {'print $5'}| awk -F"," '{print $3}'| awk -F":" '{print $2}'
100000