2017-05-16 22 views
0

私はちょうどAwkを使い始めました。ここで私はすべての今のINPUT.TXTでオンまたはawakeのMMDDYYYY日付形式コンパイル

awk -F "\t" '(substr($2,5,4)<1997||(substr($2,5,4)==1997 && substr($2,1,2)<=05 && substr($2,3,2)<=17)) {print $1}' <input.txt 

データの前に

Bharath 01061992 
Ragul 10302002 
Bala 01171993 
Arjun 05142003 
Vimal 06301997 
Ramesh 05171997 
Kamal 05151997 
Vinoth 05201997 

それだけで罰金生まれている人の名前を取得するために使用されている私のawkコードが含まれます。私は知りたい比較の方法よりも2つの日付を比較する他の最良の方法はありますか?

+2

を生成? '$ 2'とは何ですか? – Inian

+4

部分文字列を連結してYYYYMMDDの順序にしてから、1つの比較だけを使用できます。 –

+0

私は 'int(substr($ 2,5,4))'を実行して上記の作業をしなければなりませんでした。また、日付比較で '<= 1997'を使います(' && 'と' || 'の両方を使用する場合は、優先度を示すためにかっこが必要かもしれません)。最後に、日付をたくさん扱う場合は、[エポックタイムスタンプ](https://en.wikipedia.org/wiki/Unix_time)の使用を検討してください。 – urban

答えて

2

算術比較に簡単に使用できるISOの日付形式に並べ替えることができます。

GNU awk(gensub用)があると仮定します。

awk -F'\t' -vdate="19970517" 'date>=gensub(/(....)(....)/,"\\2\\1",1,$2){print $1}' f 

あなたは、入力ファイルからいくつかのサンプルラインを共有することはでき

Bharath 
Bala  
Ramesh 
Kamal