열 출력에서 ​​날짜를 EPOCH로 바꾸기

열 출력에서 ​​날짜를 EPOCH로 바꾸기

다음과 같은 데이터 세트가 있습니다.

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

관련 정보