입력 파일
ID,Name,join_date
21433432,rds,2014_02_01
2131321,ABCDS,2014-10-20
2432745314,ASRER, 2015-01-20
2132432423,safdsad, 2015-12-30
두 개의 파일을 생성해야 합니다. 하나는 날짜 열이 1개월 미만, 6개월 미만인 레코드용입니다.
출력 파일 1은 1개월 미만입니다.
ID,name,join_date
2432745314,ASRER, 2015-01-20
2132432423,safdsad, 2015-12-30
출력 파일 2가 6개월 미만입니다.
2131321,ABCDS,2014-10-20
명령 을 사용했지만 awk
작동하지 않았습니다.
답변1
이는 시작하는 데 도움이 될 것입니다. 시간 함수를 구현하려면 GNU awk가 필요합니다.
gawk -F, '
function totime(ymd) {gsub(/[-_]/," ",ymd); return mktime(ymd " 0 0 0")}
BEGIN {now = systime(); m1 = now - 86400 * 30; m6 = now - 86400 * 180}
FNR == 1 {next}
{t = totime($3)}
t > m1 {print "m1", $0; next}
t > m6 {print "m6", $0}
' file
m6 2131321,ABCDS,2014-10-20
m1 2432745314,ASRER, 2015-01-20
m1 2132432423,safdsad, 2015-12-30
정확히 1개월 6개월은 아니고 30일 180일, 서머타임 전환에 따른 1시간 플러스 마이너스 1시간
답변2
date
내부 명령을 사용 하고 awk
일부 조건에 따라 출력을 원하는 파일로 리디렉션하기만 하면 됩니다.print
awk -F, 'BEGIN{ "date -d\"month ago\" +%s" | getline T1; close("date");
"date -d\"6 months ago\" +%s" | getline T6; close("date")}
{ "date -d" $3 " +%s" | getline t; close("date");
if(t>T1){print $0>"file2";next} if(t>T6)print $0>"file3"}' file
핵심 부분은 명령을 사용하여 날짜 형식을 1970년 이후의 초로 변환하는 것입니다 date -d ... "+%s"
. 나머지는 자명해야 합니다.