Linux
獲取所有文件包含的日期值小於輸入日期
我在一個文件夾中有 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") }'
請幫忙。
假設在這種情況下解析 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"
如果此條件為真,則列印輸入行由於日期為YYYY-MM-DD格式,因此無需任何轉換即可進行簡單的字元串比較
你可以試試這個命令
您可以在 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