입력 날짜 이전의 날짜 값을 포함하는 모든 파일을 가져옵니다.

입력 날짜 이전의 날짜 값을 포함하는 모든 파일을 가져옵니다.

내 폴더에 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" '

관련 정보