テキストファイルから特定の値/フィールドを抽出するには?

テキストファイルから特定の値/フィールドを抽出するには?

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

おすすめ記事