gawk 또는 awk에서 문자열을 날짜타임스탬프로 변환

gawk 또는 awk에서 문자열을 날짜타임스탬프로 변환

다음 문자열을 변환하고 싶습니다(20140805234656)가 날짜/시간 스탬프(2014-08-05 23:46:56). 저는 gawk를 처음 접했고 정확한 구문을 모릅니다. 어떻게 작성해야 합니까?-5,8포인트마다:14,17마다 " "를 인덱스 11에 배치합니다. 이것을 awk에서 달성하는 효율적인 방법이 있습니까?

편집하다

awk에서는 문자열을 변수로 사용하고 있습니다. 기록을 처리하는 동안 생성했습니다.

답변1

GNU awk를 사용하여 이를 수행하는 한 가지 방법은 다음과 같습니다.

echo 20140805234656 | awk 'BEGIN { FIELDWIDTHS = "4 2 2 2 2 2" } { printf "%s-%s-%s %s:%s:%s\n", $1, $2, $3, $4, $5, $6 }'

답변2

다음과 같이 하위 문자열을 사용할 수 있습니다.

echo 20140805234656 | awk '{print substr($0,1,4)"-"substr($0,5,2)"-"substr($0,7,2)" "substr($0,9,2)":"substr($0,11,2)":"substr($0,13,2) }'

어쩌면 더 쉬운 방법이 있을 수도 있습니다.

답변3

또 다른 GNU awk 답변

gawk -v timestamp=20140805234656 '
    BEGIN {
        if (match(timestamp, /(....)(..)(..)(..)(..)(..)/, m)) {
            t = mktime(m[1] " " m[2] " " m[3] " " m[4] " " m[5] " " m[6])
            print strftime("%F %T", t)
            print strftime("%c", t) 
        }
    }
'
2014-08-05 23:46:56
Tue Aug  5 23:46:56 2014

답변4

노력하다:

echo 20140805234656 | awk ' { printf "%s-%s-%s %s:%s:%s", 
                                     substr($0,1,4),
                                     substr($0,5,2),
                                     substr($0,7,2),
                                     substr($0,9,2),
                                     substr($0,11,2),
                                     substr($0,13,2)
                             } '

또는 변수에 먼저 할당하려면 다음을 수행하세요.

echo 20140805234656 | awk ' { d=sprintf ("%s-%s-%s %s:%s:%s", 
                                     substr($0,1,4),
                                     substr($0,5,2),
                                     substr($0,7,2),
                                     substr($0,9,2),
                                     substr($0,11,2),
                                     substr($0,13,2));
                              print "Date is: " d
                             } '

관련 정보