2014-12-17 4 views
1

나는 데이터 파일이 포함 된 다음 열데이터 파일에 날짜를 0으로 채우는 방법?

Current Date  FirstName LastName 
8/31/2014   AAA   BBB 
8/31/2014   CCC   DDD 

내가하고 싶은 것은의하는 currentDate 열에서 날짜를 추출 변환 그냥 연도와 달 새 열에 넣어이다. 이처럼

:

CurrentMonth CurrentDate  FirstName LastName 
201408  8/31/2014   AAA   BBB 
201408  8/31/2014   CCC   DDD 

내가 awk 명령과 노력 위의 명령은 201408.

CurrentMonth CurrentDate  FirstName LastName 
20148  8/31/2014   AAA   BBB 
20148  8/31/2014   CCC   DDD 

보다는 나에게 20,148을 제공하지만

awk -F $'\t' 'BEGIN {OFS=FS} { { split($1, val,"/") } print val[3] val[1],$0}' > outputFile

어떻게 할 날짜 0에 패드 0? AWK에서

awk -F $'\t' 'BEGIN {OFS=FS} { { split($1, val,"/") } printf "%04d%02d\t%s\n", val[3], val[1],$0}' 

printf 같은 C에서 printf만큼 작동합니다 :

답변

1

그냥 printf 사용 C 참조 사이트 (예 : here)에서 형식 언어에 대한 사양을 찾을 수 있습니다. 간단히 말하면, %04d과 같은 형식 사양에서 은 형식 연산자를 도입하고 0은 0으로 패드를 의미하고 4은 인쇄 할 폭을 의미하며 d은 "10 진수로 인쇄"를 의미합니다.

이 awk 스크립트 수익률

AWK에서 printf 기능
201408 8/31/2014 AAA BBB 
201408 8/31/2014 CCC DDD 
+0

매우 감사 코드를입니다! "% 04d % 02d \ t % s \ n"의 의미를 제게 설명해 주시겠습니까? – user59036

+0

필자는 필드 구분 기호에 '$'를 설명 할 수 있습니까? 나는 탭을 입력을위한 기본 필드 분리 자로 만들고'printf'를 사용하여 출력을 제어하기 때문에'awk 'code''를 사용했을 것입니다. – Jotne

+0

@Jotne 탭은 기본 필드 구분 기호가 아니며 기본 필드 구분 기호에 포함 된 공백 문자 중 하나입니다. OP는 탭이 아닌 공백이있는 입력란을 표시하지 않았지만 예제에서 탭을 지정하고 있기 때문에 막대기를 사용할 수 있습니다. '$ '는 셸에서 리터럴 문자를 생성하는 데 사용되므로 셸에서'$'\ t''는 리터럴 탭 문자이고 '\ t'는 탭 문자를 나타내는 이스케이프 시퀀스입니다. 어느 것이 든 awk를 위해 잘 작동 할 것이다. –

0

, 여기 %02s

를 사용

awk 'BEGIN{print "CurrentMonth CurrentDate  FirstName LastName"} 
    NR>1{split($1,a,"/"); printf "%s%02s\t\t%s\n",a[3],a[1],$0}' infile 

CurrentMonth CurrentDate  FirstName LastName 
201408  8/31/2014   AAA   BBB 
201408  8/31/2014   CCC   DDD 
+0

이것은 nneonneos 게시물의 복사본으로 15 분 전에 게시됩니다. (첫 번째 줄 제외). – Jotne

+0

불쾌하지 않아야합니다. 나는 아이디어가 동일하기 때문에 하나의 질문이 다른 질문과 다소 다르다는 것을 종종 봅니다. :) – Jotne

관련 문제