다음과 같은 데이터 세트가 있습니다.
user1 1234 01/01/2020
user2 2345 02/02/2020
사용자 이름과 ID 번호를 유지하면서 세 번째 열(날짜)을 EPOCH로 변환해야 합니다.
user1 1234 1577862000
user2 2345 1580626800
변환하여 인쇄할 수 있게 되었는데 새 날짜가 새 줄에 추가됩니다.
$awk '{print($1,$2)}; system("date -d "$3" +%s")' data
user1 1234
1577862000
user2 2345
1580626800
새 EPOCH 날짜를 열 1 및 열 2와 동일한 행에 배치하려면 어떻게 해야 합니까?
답변1
print
기본적으로 개행 문자가 추가됩니다. 사용 printf
:
awk '{printf "%s %s ",$1,$2; system("date -d "$3" +%s")}' data
OFS
특수 출력 필드 구분 기호가 정의된 경우 다음을 사용할 수 있습니다.
awk '{printf "%s%s%s%s",$1,OFS,$2,OFS; system("date -d "$3" +%s")}' data
각 매개변수는 %s
나머지 매개변수 중 하나를 가져옵니다 printf
.
산출:
user1 1234 1577847600
user2 2345 1580612400
답변2
GNU awk(일명 )가 있는 경우 gawk
내장된 시간 mktime
함수를 사용할 수 있습니다(날짜 형식을 입력하려면 먼저 약간의 작업이 필요하지만).
$ gawk 'split($3,a,"/") {$3 = mktime(sprintf("%04d %02d %02d 00 00 00",a[3],a[2],a[1]))} 1' data
user1 1234 1577854800
user2 2345 1580619600
또는 Miller는 Type C strptime
와 다음을 제공합니다 strftime
.
$ mlr --nidx put '$3 = strftime(strptime($3,"%d/%m/%Y"),"%s")' data
user1 1234 1577854800
user2 2345 1580619600
또는 Perl에서 Time::Piece 모듈을 유사하게 사용하십시오:
$ perl -MTime::Piece -alne '
$t = pop @F; print join " ", @F, Time::Piece->strptime($t,"%d/%m/%Y")->strftime("%s")
' data
user1 1234 1577854800
user2 2345 1580619600