awkの$ 0の行全体に一致する正規表現

awkの$ 0の行全体に一致する正規表現

awk正規表現の助けやアドバイスが必要です。不規則に構造化されたデータ入力ファイルがあります。このファイルを正しく解析するには、次の形式の行を識別する必要があります。

@ 8/1/17, 10:04 PM  

このパターンを含む行は、トランザクション全体の終わりを示します。スペースと文字の前に日付とタイムスタンプが必要です@

私は「ほとんどの」使用法と一致すると思われる正規表現を一緒にまとめました。

\W\@\W[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{1,2}\,\W[0-9]{1,2}\:[0-9]{2}\W[AP]M  

ただし、次の文で使用すると一致しないようですawk

$ awk 'match($0, /\W\@\W[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{1,2}\,\W[0-9]{1,2}\:[0-9]{2}\W[AP]M/) {print $0}' testfile2.txt

私のシステム(モハビマコース)には以前のバージョンがありますawk awk version 20070501

私も以下を見つけました:

  • grep -etestfile2.txtこのパターンを任意の行と一致させることはできませんでしたが、一致すると予想した行と一致しましたegrepgrep -E

  • awk 'match($0, /\@/) {print $0}' testfile2.txt予想される行と一致(および印刷)しますが、単一の文字に依存することはできません!

これはtestfile2.txtです:

+13054261988: データをプライマリリポジトリに渡す
@ 1/7/18, 4:21
+16744774911: 次の URL を使用してください:https://www.repo-prime.ga/
@1/7/18、午後4時22分
+13054261988:はい。パスワードは大丈夫ですか?
@ 1/7/18、6:12 PM
+16744774911:いいえ、すべての取引に2FAを使用します
@ 1/7/18、8:56 PM
+13054261988:Google OTPを使用しますか?

その場合は、より多くの情報が必要です。
@ 1/7/18、午後9時36分
+13054261988:できるだけ早く返信してください。アップロードする必要がある取引があります。
2018年1月7日午後9時46分

awkステートメントに表示されないエラーのため、正規表現が使用中に一致しませんかawk?それとも正規表現自体、2つの組み合わせなどが原因ですか?

ベストアンサー1

{…}非常に古いawkバージョンにはその機能がないようです。

この以前の正規表現構文は、すべてのawkで一致する必要があります。

awk '/@ [0-9][0-9]?\/[0-9][0-9]?\/[0-9][0-9]?, [1-2]?[0-9]:[0-6][0-9] [AP]M/' file

awkが次のような角括弧式と一致する場合は、正規表現を[[:blank:]]より柔軟にすることができます。

awk '/@[[:blank:]][0-9][0-9]?\/[0-9][0-9]?\/[0-9][0-9]?,[[:blank:]][1-2]?[0-9]:[0-6][0-9][[:blank:]][AP]M/' file

1つ以上の数字を一致させることで十分であれば(なぜそれをすべきかわからない)、より短い正規表現を使用できます。

awk '/@ [0-9]+\/[0-9]+\/[0-9]+, [1-2]?[0-9]:[0-6][0-9] [AP]M/' file

必要に応じて start^と end を追加して正規$表現をさらに制限することができます。

私はmatchこのように単純な行一致を使用しませんが、同じ正規表現はこの関数と完全に機能します。

おすすめ記事