나는 파일을 가지고 있고 각 줄에는 몇 가지 정보와 날짜가 있으므로 내가 원하는 것은 주어진 날짜 이후의 날짜 줄을 인쇄하는 것입니다. 나는 이 awk 명령을 사용한다
sort -t$'|' -k5 $2 | awk -F '|' -v DatedAfter=$4 '!/^#/ && $5>=DatedAfter {print $0}'
여기서 $4는 DD/MM/YYYY 형식으로 지정된 날짜이고 $2는 다음 형식으로 사용 중인 파일입니다.
1099511628908|Chen|Wei|female|02/08/1989|2010-05-24T20:52:26.582+0000|27.98.244.108|Firefox
1099511633435|Smith|Jack|male|19/04/1978|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
따라서 코드를 실행하면 이러한 결과가 나타납니다.
./tool.sh --born-since 17/11/1983 -f events.dat
1099511629352|Nunez|Jorge|female|17/11/1986|2011-04-04T05:54:52.693+0000|201.221.59.59|Opera|Facebook
1099511638548|Phan|Don|female|17/5/1981|2011-04-19T00:14:15.041+0000|112.72.79.36|Opera|Flickr
1099511638387|Znaimer|Moses|male|17/8/1980|2011-05-12T01:03:01.291+0000|94.199.19.90|Internet Explorer|Youtube
6597069776449|Svensson|Ernst|male|30/11/1981|2012-04-22T05:16:03.557+0000|31.31.166.207|Opera|Youtube
2199023258994|Ngoche|Alex Obanda|female|30/9/1987|2011-07-22T16:36:27.420+0000|41.81.41.21|Opera|Google+
7696581405294|Dobrunov|Aleksandr|male|31/12/1989|2012-05-15T05:46:31.439+0000|31.25.243.122|Internet Explorer|LinkedIn
2199023266450|Charoenpura|Somchai|male|4/12/1987|2011-08-30T20:34:41.524+0000|110.76.154.132|Mozilla|Youtube
3298534890514|Chen|Hsin|male|4/4/1988|2011-11-03T16:32:44.238+0000|115.42.116.30|Safari|Google+
2199023261081|Ben Dhifallah|Karim|male|6/4/1980|2011-06-11T02:24:17.194+0000|193.95.74.75|Chrome|Twitter
8796093024550|Yang|Lei|male|7/1/1990|2012-07-15T17:14:42.186+0000|1.4.92.176|Mozilla|Facebook
답변1
YYYYMMDD
날짜가 알파벳 순서로 되어 있으면 더 쉬울 것입니다(그러면 사전순과 숫자순으로 되어 있을 것입니다). gensub
awk에서 사용할 수 있습니다 . 예를 들어:
awk -F"|" -v d="$d" -v dp='(..)/(..)/(....)' 'BEGIN {gensub(dp, "\3\2\1", d)} {dt=$5; gensub(dp, "\3\2\1", dt);} dt >= d' foo
이 d
변수는 비교에 사용된 날짜를 보유하고 dp
날짜와 일치하는 패턴을 보유합니다 DD/MM/YYYY
. 그런 다음 를 사용하여 일치하는 그룹( , second , first ) 인 해당 그룹( , )을 각각 gensub
이동합니다 . 각 행의 다섯 번째 필드와 마찬가지로 입력 수정을 피하기 위해 이 필드를 복사합니다.\3
\2
\1
(....)
(..)
(..)
더 많은 날짜로 예제 입력을 확장했습니다.
1099511628908|Chen|Wei|female|02/08/1989|2010-05-24T20:52:26.582+0000|27.98.244.108|Firefox
1099511633435|Smith|Jack|male|19/04/1978|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
1099511633435|Smith|Jack|male|19/04/1979|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
1099511633435|Smith|Jack|male|19/04/1977|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
1099511633435|Smith|Jack|male|19/04/1980|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
1099511633435|Smith|Jack|male|19/03/1978|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
비교를 위해 다음 결과를 얻습니다 19/04/1978
.
1099511633435|Smith|Jack|male|19/04/1978|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
1099511633435|Smith|Jack|male|19/04/1979|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
1099511633435|Smith|Jack|male|19/04/1980|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
답변2
어때요?
DT="01/08/1989"
awk -F\| -vDT=${DT:6}${DT:3:2}${DT:0:2} 'substr($5, 7) substr($5, 4, 2) substr($5, 1, 2) > DT' file
1099511628908|Chen|Wei|female|02/08/1989|2010-05-24T20:52:26.582+0000|27.98.244.108|Firefox