วิธีการแปลงจากรูปแบบวันที่หนึ่งไปเป็นรูปแบบอื่น ๆ ?


11

ฉันมีปัญหาหนึ่งกับรูปแบบวันที่ของฉัน ฉันต้องการเปลี่ยนจากรูปแบบหนึ่งเป็นอีกรูปแบบหนึ่งและกลับกัน รูปแบบวันที่ของฉันคือ

รูปแบบ 1

YYYY-MM-DD

รูปแบบ 2

MM/DD/YYYY

ฉันต้องการเปลี่ยนรูปแบบ 1 เป็นรูปแบบ 2 และจัดรูปแบบ 2 เป็นรูปแบบ 1


o ให้ชัดเจนยิ่งขึ้นฉันมีไฟล์ file1 ชื่อ: date 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. เอาต์พุตที่ต้องการคือ 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 และรองกัน
AiB

Forward-slashes เป็นหนึ่งในสองตัวละครที่ไม่สามารถอยู่ในชื่อไฟล์ * 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 ชื่อ: date 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. เอาต์พุตที่ต้องการคือ 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 และรองกัน
AiB

1
@Abraham วิธีนี้ไม่เป็นไปตามข้อกำหนดที่?
จอร์แดน

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 ชื่อ: date 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. เอาต์พุตที่ต้องการคือ 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 และรองกัน
AiB

ขอบคุณ 1_CR มันใช้งานได้หลังจากที่ฉันปรับเปลี่ยนเล็กน้อย !! #! / bin / bash echo '$ 1- $ 2- $ 3' | awk -v FS = - -v OFS = / '{พิมพ์ $ 2, $ 3, $ 1}' data.file
AiB

@Abraham คุณควรลองเสี่ยงโชคด้วยdateวิธีการของ Drewbenn ซึ่งแน่นอนกว่านี้มากขึ้น
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

ตอบคำถามที่ชี้แจงในความคิดเห็นเกี่ยวกับวิธีการเปลี่ยนรูปแบบวันที่ในชื่อไฟล์ให้ใช้ตัวแปรของgnu dateวิธีการของ Drewbenn คำสั่งนี้ค้นหาไฟล์ทั้งหมดในโฟลเดอร์โลคัลและไพพ์ชื่อไฟล์เท่านั้นเพื่อxargsแทนที่dateชื่อไฟล์ที่ถูกแก้ไขเป็นอาร์กิวเมนต์ที่สองmvซึ่งดำเนินการเปลี่ยนชื่อ

bashจำเป็นต้องใช้การแทนค่าตัวแปรเพิ่มเติมแบบวนวงจรเล็กน้อยตามการbashประเมิน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.