한 날짜 형식에서 다른 형식으로 변환하는 방법은 무엇입니까?


11

날짜 형식에 문제가 있습니다. 한 형식에서 다른 형식으로 또는 그 반대로 변경하고 싶습니다. 내 날짜 형식은

형식 1

YYYY-MM-DD

형식 2

MM/DD/YYYY

형식 1을 형식 2로, 형식 2를 형식 1로 변경하고 싶습니다.


더 명확하게 말하면 파일 file1 이름이 있습니다. 날짜 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. 필요한 출력은 01 / 01.2000 01/02/2000 01 / 03 / 2000 년
01

슬래시 (*)는 * nix 파일 이름으로 사용할 수없는 유일한 두 문자 중 하나입니다.
evilsoup

답변:


14

이를 위해 GNU '날짜'를 사용하십시오. 또한 다른 형식으로 변환합니다 ( date --help형식 목록 참조 ).

$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05

더 명확하게 말하면 파일 file1 이름이 있습니다. 날짜 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. 필요한 출력은 01 / 01.2000 01/02/2000 01 / 03 / 2000 년
01

1
@Abraham이 요구 사항을 어떻게 충족시키지 못합니까?
jordanm

6

텍스트 형식으로 변환해야하는 날짜가 있다고 가정

echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'

그 반대

echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'

더 명확하게 말하면 파일 file1 이름이 있습니다. 날짜 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. 필요한 출력은 01 / 01.2000 01/02/2000 01 / 03 / 2000 년
01

1_CR 감사합니다. 조금 수정 한 후에 작동합니다 !! #! / bin / bash echo '$ 1- $ 2- $ 3'| awk -v FS =--v OFS = / '{print $ 2, $ 3, $ 1}'data.file
AiB

@Abraham, drewbenn의 date접근법으로 행운을 시험해보십시오. 더욱 우아합니다
iruvar

3
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY

해당 날짜가 많은 파일이있는 경우 한 줄에 하나씩 :

awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file

0

다음과 같이 sed를 사용하십시오.

$ echo '2013-12-13' | sed -r 's/([[:digit:]]{2,4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})/\2\/\3\/\1/g'
12/13/2013
$ echo '12/13/2013' | sed -r 's/([[:digit:]]{1,2})\/([[:digit:]]{1,2})\/([[:digit:]]{2,4})/\3-\1-\2/g'
2013-12-13

0

파일 이름에서 날짜 형식을 변경하는 방법에 대한 의견에서 명확한 질문에 대답하려면 drewbenn의 gnu date접근 방식을 사용하십시오. 이 명령은 로컬 폴더에서 모든 파일을 찾고 파일 이름 만으로 파이프하고 이름을 바꾸는 두 번째 인수로 수정 ​​된 파일 이름을 xargs대체합니다 .datemv

명령 bashbash평가할 때 변수를 대체로 약간 체계적으로 사용하는 것이 필요 합니다 date.

find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1  $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.