Linuxシステムのテキストファイルから次の値/フィールドを抽出するには:
EventCorrelationId="615-493|-1899671563||1550927718000"
CreationTime="20190225094504"
SubscriberNumber=92705073362
テキストファイルのサンプルデータは次のとおりです。
2019-02-25 09:45:04.427 FAIL RETRY: Failed for request id: 11235993 Cause: userNotReachable Info: <undef> Code: 27,USSD RequestId=11235993 OriginalId=11235993 EventCorrelationId="615-493|-1899671563||1550927718000" CreationTime="20190225094504" ResendCount=0 Timestamp=1551071704342 (Mon Feb 25 09:45:04 AFT 2019) State=STATE_SENT SubscriberNumber=92705073362 UssdText=Last event was charged 687.95 MB from 3GB Monthly, Main Account 6.00 PKR, Remaining data 2,388.75 MB (Exp 25.03.2019), Main Account 7.62 PKR1500 PKR = 32GB valid 30 Days, Dial *477*32*1#. NumberingPlan=1 Nadi=4 UssdFormat=2
ベストアンサー1
grepを使う
$ grep -oE '(EventCorrelationId|CreationTime|SubscriberNumber)[^ ]*' textfile
EventCorrelationId="615-493|-1899671563||1550927718000"
CreationTime="20190225094504"
SubscriberNumber=92705073362
awkを使う
努力する:
$ awk -v RS=' ' '/^EventCorrelationId=/ || /^CreationTime=/ || /^SubscriberNumber=/' textfile
EventCorrelationId="615-493|-1899671563||1550927718000"
CreationTime="20190225094504"
SubscriberNumber=92705073362
どのように動作しますか?
-v RS=' '
これは awk にレコード区切り文字としてスペースを使用するように指示します。
/^EventCorrelationId=/ || /^CreationTime=/ || /^SubscriberNumber=/
これは、awkに、これら3つの正規表現のうちの1つが一致した場合にレコードを印刷するように指示します。いくつかの注意:
正規表現は
^
レコードの開始を表します。したがって、/^CreationTime=/
次から始まるレコードを意味します。CreationTime=
awkでは、多くの言語と同様に
||
論理ORを意味します。^EventCorrelationId=/ || /^CreationTime=/
正規表現が一致した場合は真です。
sedを使う
$ sed -En 's/.*(EventCorrelationId=[^ ]*).*(CreationTime=[^ ]*).*(SubscriberNumber=[^ ]*).*/\1\n\2\n\3/p' textfile
EventCorrelationId="615-493|-1899671563||1550927718000"
CreationTime="20190225094504"
SubscriberNumber=92705073362
出力に代替区切り記号を使用する
|
改行文字の代わりに出力区切り文字として使用されます。
$ sed -En 's/.*(EventCorrelationId=[^ ]*).*(CreationTime=[^ ]*).*(SubscriberNumber=[^ ]*).*/\1|\2|\3/p' textfile
EventCorrelationId="615-493|-1899671563||1550927718000"|CreationTime="20190225094504"|SubscriberNumber=92705073362