2016-05-18 7 views
1

私は電話帳ファイルrubrica.txtを持っています。これは、各行のレコード(名前、名前、電話番号、電話番号、日付、秒単位)を含んでいます。 (各エントリはスペースで区切られている)こと:ファイル内の文字列のフィールドをシェル内の変数と比較する

andrea mantovani 3476589456 0451234567 2016/05/16 1463419858190456946 
marco verratti 1265897654 3057634987 2016/05/16 1463419948782978926 
zlatan ibrahimovic 2937485929 1938472639 2016/05/16 1463420078149548084 
cesc fabregas 5641287659 3456789123 2016/05/16 1463420324574207170 
andrea mantovani 3402948586 0459687124 2016/05/17 1463500810082293135 
marco rossi 3951326586 0458793540 2016/05/17 1463500836814967504 

私は出力に私が挿入された日付以降に追加されているすべての連絡先を表示したいです。まず

私は私がしたい日付を読み、次のスクリプトを秒に変換します

echo "Digit the date" 
read date_jap    #read a date(yyyy/mm/dd)      
data_sec=$(date +%s -d $data_jap) #convert the date in sec 

コード関数のこの部分。私はそれをより明確に説明します。

この日付とファイルrubrica.txtの日付(最後のエントリ)を比較するにはどうすればよいか分かりません。

は、私が使用:date_secよりも大きい:

cat $RUBRICA | awk '/$data_sec < \6/ { print }' 

は、その日の秒の行のフィールド6における(1463419858190456946たとえば最初の行で私のファイルを取って)すべての連絡先を表示します。

$data_sec < \6私は間違いがあります。私はそれを修正する必要があります。

+1

日付を秒単位に変換する必要はありません。あなたの日付はYYYY/MM/DDの形式になっているので、辞書編集による比較で十分です。 – user1934428

+0

'awk '{if($ 6> ENVIRON [" data_sec "])print}'は動作するはずです。 'data_sec'をエクスポートすることを忘れないでください。さもなければ、' awk'ではそれを見ることができません。別のオプション: 'awk" {if(\ $ 6> $ data_sec)print} '' 'ここで' $ data_sec'をエクスポートする必要はありません –

+0

@DmitriChubarovまたは 'awk -v dsec =" $ data_sec "' –

答えて

1

のは数秒であなたの日付は3番目のレコードの値であると仮定して、それを割り当ててみましょう:

data_sec=1463420078149548084 

今、私たちはそれに6番目のフィールドを比較し、-vを使用してのawkには、この値を取得する:

$ awk -v mydate="$data_sec" '$6 > mydate' rubrica.txt 
cesc fabregas 5641287659 3456789123 2016/05/16 1463420324574207170 
andrea mantovani 3402948586 0459687124 2016/05/17 1463500810082293135 
marco rossi 3951326586 0458793540 2016/05/17 1463500836814967504 

$6 > mydateがtrueと評価された場合、レコードが印刷されます。

関連する問題