Làm thế nào để chuyển đổi từ định dạng một ngày sang định dạng khác?


11

Tôi có một vấn đề với định dạng ngày của tôi. Tôi muốn thay đổi từ định dạng này sang định dạng khác và ngược lại. Định dạng ngày của tôi là

Định dạng 1

YYYY-MM-DD

Định dạng 2

MM/DD/YYYY

Tôi muốn thay đổi định dạng 1 sang định dạng 2 và định dạng 2 thành định dạng 1.


o rõ ràng hơn, tôi có tập tin tên tập tin1: ngày 2000-01-01 2000-01 / 02 2000-01-03 2000-01-04 .. Đầu ra bắt buộc là 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 và ngược lại
AiB

Dấu gạch chéo là một trong hai ký tự duy nhất không thể có trong tên tệp * nix ...
evilsoup

Câu trả lời:


14

Sử dụng GNU 'ngày' cho việc này. Nó cũng sẽ chuyển đổi giữa các định dạng khác cho bạn (xem date --helpdanh sách các định dạng).

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

để rõ ràng hơn, tôi có tên tệp file1: ngày 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. Đầu ra bắt buộc là 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 và ngược lại
AiB

1
@Abraham làm thế nào điều này không đáp ứng yêu cầu đó?
jordanm

6

Giả sử bạn có ngày ở dạng văn bản cần phải được chuyển đổi

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

Và ngược lại

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

để rõ ràng hơn, tôi có tên tệp file1: ngày 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. Đầu ra bắt buộc là 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 và ngược lại
AiB

Cảm ơn bạn 1_CR, Nó đang hoạt động sau khi tôi sửa đổi một chút !! #! / bin / bash echo '$ 1- $ 2- $ 3' | awk -v FS = - -v OFS = / '{in $ 2, $ 3, $ 1}' data.file
AiB

@Abraham, bạn nên thử vận ​​may với datecách tiếp cận của drewbenn , điều đó chắc chắn sẽ thanh lịch hơn
iruvar

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

Nếu bạn có một tệp có nhiều ngày, mỗi dòng:

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

0

Sử dụng sed như sau:

$ 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

Trả lời câu hỏi được làm rõ trong các ý kiến ​​về cách thay đổi định dạng ngày trong tên tệp, sử dụng một biến thể của gnu datephương pháp của drewbenn . Lệnh này tìm tất cả các tệp trong thư mục cục bộ và chỉ đặt tên tệp vào xargs, thay thế datetên tệp đã sửa đổi làm đối số thứ hai để mvthực hiện đổi tên.

Việc sử dụng bổ sung, bashthay thế một chút mạch thay thế là cần thiết khi bashđánh giá datelệnh.

find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1  $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.