私のフォルダには1000個の.txtファイルがあります。
このフォルダの出力はls
次のとおりです。
2-20160329050200862185.instan-methodstack_2016-03-06-23.55.05.436-+0000_2016-09-07-05.31.47.105-+0000.txt
2-20160329050200862185.instan-methodstack_2016-03-06-23.55.05.436-+0000_2016-09-07-05.27.47.000-+0000.txt
2-20160329050200862185.instan-methodstack_2016-03-06-23.55.05.436-+0000_2016-09-07-05.25.46.891-+0000.txt
2-20160329050200862185.instan-methodstack_2016-03-06-23.55.05.436-+0000_2016-09-07-05.23.46.788-+0000.txt
2-20160329050200862185.instan-methodstack_2016-04-27-07.02.41.320-+0000_2016-07-27-07.07.21.784-+0000.txt
2-20160329050200862185.instan-methodstack_2016-04-27-07.02.41.320-+0000_2016-07-27-07.05.22.541-+0000.txt
2-20160329050200862185.instan-methodstack_2016-04-27-07.02.41.320-+0000_2016-07-27-07.02.41.320-+0000.txt
2-20160329050200862185.instan-methodstack_2016-04-27-06.22.49.534-+0000_2016-07-27-07.01.32.824-+0000.txt
ここで、日付値が入力日より小さいすべてのファイルを一覧表示したいと思います。
たとえば、
私の入力日は2016-08-11です。
私が望む結果は次のとおりです。
2-20160329050200862185.instan-methodstack_2016-04-27-07.02.41.320-+0000_2016-07-27-07.07.21.784-+0000.txt
2-20160329050200862185.instan-methodstack_2016-04-27-07.02.41.320-+0000_2016-07-27-07.05.22.541-+0000.txt
2-20160329050200862185.instan-methodstack_2016-04-27-07.02.41.320-+0000_2016-07-27-07.02.41.320-+0000.txt
2-20160329050200862185.instan-methodstack_2016-04-27-06.22.49.534-+0000_2016-07-27-07.01.32.824-+0000.txt
日付値の比較は、次の文字列の後に確認する必要があります。+0000_
複数のコマンドを試しましたが、何も機能しませんでした。
ls | awk ' { i = substr($0, 73, 10); cond = "2015-09-07"; if expr "$i" "<" "$cond" > /dev/null; then print($0); fi }'
ls | awk ' { i = substr($0, 73, 10); if ( (date -d i +"%Y%m%d") -lt 20160907 ) print($0) endif; print("\n") }'
助けてください。
答え1
仮説lsを解析するこの場合、間違っているのは簡単ではありません。
ls | awk '{ i = substr($0, 73, 10); if(i < "2016-08-11") print }'
またはそれに対応する
ls | awk '{ i = substr($0, 73, 10) } i < "2016-08-11" '
i = substr($0, 73, 10)
抽出された日付を変数に保存i
i < "2016-08-11"
この条件が true の場合、入力行を印刷します。
日付が含まれている年月日フォーマットすると、変換なしで単純な文字列比較が機能します。
答え2
このコマンドを試すことができます
awkコマンドの日付入力をyyymmdd形式で指定できます
ls *.txt > all_files.txt
awk -F_ -vin_date="20160427" '{split($2,a,"-");date=a[1]a[2]a[3];if(date+0<in_date)print}' all_files.txt
答え3
組み合わせmatch
て目的の結果をsubstr
提供します。awk
ls | awk 'match($0,"\+0000_"){i = substr($0,RSTART+6,10)} i < "2016-08-11" '