14 days
다음보다 오래된 메시지 수에 대해 파일을 grep 하고 결과 수를 반환하는 값을 갖는 방법을 찾으려고 합니다.
오늘 날짜를 예로 들어보겠습니다 20160616
. $grep 'Put Date' filename
:
Put Date :'20160425'
Put Date :'20160501'
Put Date :'20160514'
Put Date :'20160609'
Put Date :'20160610'
Put Date :'20160616'
결과는 다음과 같이 표시되어야 합니다. 14일이 넘었으며 다음과 같은 내용이 표시됩니다 return 3
.
Put Date :'20160226'
Put Date :'20160501'
Put Date :'20160514'
답변1
당신이 사용할 수있는:
awk -v threshold=$(date "--date=$(date) -14 day" +%Y%m%d) -F "'" '$2 < threshold' filename | wc -l
이는 다음의 솔루션과 유사합니다.이 게시물날짜가 인라인으로 계산된다는 것뿐입니다.
노트: filename
이름으로 바꿔야 함당신의 파일.
또한 경계 날짜 규칙에 주의해야 합니다(경계 조건 확인).
답변2
awk
솔루션이 게시되었으므로 grep
다음을 기반으로 솔루션을 만들 것입니다.
먼저, 보고 싶지 않은 날짜를 한 줄에 하나씩 포함하는 파일을 만듭니다. 여기에는 항목이 15개뿐이므로 많은 처리가 필요하지 않고 빠릅니다. 다음에는 date
내 [BSD] 시스템에 다음과 같이 설치된 GNU가 필요합니다 gdate
.
i=0
while (( i < 15 )); do
gdate -d "now -$(( i++ )) days" +"%Y%m%d"
done >dates_to_skip
완료되면 간단히 다음 항목에 대한 필터로 사용할 수 있습니다 fgrep -v
.
fgrep -v -f dates_to_skip mydata