入力日より前の日付値を含むすべてのファイルを取得します。

入力日より前の日付値を含むすべてのファイルを取得します。

私のフォルダには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" '

関連情報