awk를 사용하여 데이터 파일의 숫자 목록을 날짜 형식으로 변환하는 방법

awk를 사용하여 데이터 파일의 숫자 목록을 날짜 형식으로 변환하는 방법

두 번째 열은 날짜이며 DD.MM.YYYY로 인쇄하고 싶습니다. 네 번째 줄은 약간 다릅니다.

89  150716  -50,00
101 170816  -50,00
123 141016  -100,00
142 91216   -100,00
19  140217  -100,00
38  230317  -50,00
50  200417  -50,00
65  260517  -50,00
77  190617  -50,00
95  200717  -50,00
106 150817  -50,00
120 150917  -50,00
164 171117  -100,00
10  150118  -100,00

답변1

awk '{ s = sprintf("%06d", $2); d = substr(s,1,2); m = substr(s,3,2); y = "20" substr(s,5,2); printf("%s%s%s.%s.%s%s%s%s", $1, OFS, m, d, y, OFS, $3, ORS) }' file.in
89 07.15.2016 -50,00
101 08.17.2016 -50,00
123 10.14.2016 -100,00
142 12.09.2016 -100,00
19 02.14.2017 -100,00
38 03.23.2017 -50,00
50 04.20.2017 -50,00
65 05.26.2017 -50,00
77 06.19.2017 -50,00
95 07.20.2017 -50,00
106 08.15.2017 -50,00
120 09.15.2017 -50,00
164 11.17.2017 -100,00
10 01.15.2018 -100,00

awk더 나은 형태의 코드:

{
    s = sprintf("%06d", $2)

    d = substr(s,1,2)
    m = substr(s,3,2)
    y = "20" substr(s,5,2)

    printf("%s%s%s.%s.%s%s%s%s", $1, OFS, m, d, y, OFS, $3, ORS)
}

s두 번째 입력 필드에 0으로 채워진 6자리 형식을 설정하여 시작합니다. 그런 다음 이 문자열에서 , d및 (일, 월, 연도)를 추출하여 m연도 부분에 접두사로 추가합니다.y20

그런 다음 printf결과 기록을 인쇄하십시오. OFS현재출력 필드 구분 기호(보통 공백) ORS이며출력 레코드 구분 기호(보통 개행 문자)

탭으로 구분된 출력을 얻으려면 다음을 수행하십시오.

awk -vOFS='\t' '{ ...as above... }' file.in

관련 정보