2016-05-11 6 views
2

日付を一致させるために次の正規表現を試しています。この正規表現をより大きなawkスクリプトで使用しますが、これはうまくいかないようです。awkデータの一致がregexp + date関数では機能しない

echo "2343-23-23"| nawk '/[0-9]{4}-[0-9]{2}-[0-9]{1,2}/' 

上記の行はまた、空の行に

を与え、どのように私は、返された結果が日付に変換する変換するのですか?私は、一致する結果を比較する日付をしたいと思います。私は最終的に

echo "2016-01-01 11:12:13,234" | nawk '/[0-9]{4}-[0-9]{2}-[0-9]{1,2}/ {if(date($0) > date("2016-01-01 10:00:00,234"){print "Yes";}}' 

ありがとう、次のような何かをしたいと思います。

答えて

1

正規表現はそのままにしてから、1を追加してください。 1は常にtrueと評価されるため、デフォルト操作{print $0}を実行します。

awk '/[0-9]{4}-[0-9]{2}-[0-9]{1,2}/1' <<< 1999-05-05 
古いバージョンの

、あなたが試すことができます:

awk '/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/1' <<< 1999-05-05 

Ideone `に精通していないデモ

http://ideone.com/jyYUrM

+0

ありがとうございました!任意のアイデアどのように日付に文字列を変換するには?質問の私の最後の行を見てください。 – Zeus

+0

awkの結果をこの回答のbashスクリプトにパイプしたいかもしれません。http://unix.stackexchange.com/a/84387/24179 –

+0

最後に1は何をしますか? – Zeus

1

nawkは、とりわけRE間隔をサポートしない非常に古い非POSIX awkです。可能な場合はgawkを取得/使用してください。それ以外の場合は最新のawkですが、nawkで動かない場合は/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/を使用してください。

wrtあなたのフォローアップの質問 - 簡潔でテスト可能なサンプル入力と予想される出力と、あなたが現在書いていることが不明で、 。

+0

nawk'、'あり - インターバル式を有効にするには、re-interval'オプションを使用しますか? – Kent

+0

@Kent no、これはgawkの古いバージョン用です。 nawkはちょうど非常に古く、単にREのインターバルや文字クラス、あるいは他の現代的なPOSIX構造をサポートしていません。 –

関連する問題