Chuyển đổi ngày thành định dạng epoch trong một tệp cho nhiều mục bằng cách sử dụng tập lệnh shell


-1

dưới đây là định dạng trong một tập tin. bất cứ ai có thể giúp chuyển đổi hai cột đầu tiên ở định dạng ngày sang định dạng epoch?

2018-01 / 02 05: 44: 00,2018-01 / 02 05: 59: 00,1,702058496,0,0,0,0,0,0,0,0,0

2018-01 / 02 05: 44: 00,2018-01 / 02 05: 59: 00,1,702058496,2,0,0,0,0,0,0,0,0

2018-01 / 02 05: 44: 00,2018-01 / 02 05: 59: 00,1,702058496,3,32,0,0,0,0,32,0,0

2018-01 / 02 05: 44: 00,2018-01 / 02 05: 59: 00,1,702058496,4,0,0,0,0,0,0,0,0

2018-01 / 02 05: 44: 00,2018-01 / 02 05: 59: 00,1,702062592,0,0,0,0,0,0,0,0,0

2018-01 / 02 05: 44: 00,2018-01 / 02 05: 59: 00,1,702062592,2,0,0,0,0,919,0,0

2018-01 / 02 05: 44: 00,2018-01 / 02 05: 59: 00,1,702062592,3,919,0,0,0,0,0,0,0

2018-01 / 02 05: 44: 00,2018-01 / 02 05: 59: 00,1,702062592,4,0,0,0,0,0,0,0,0

2018-01 / 02 05: 44: 00,2018-01 / 02 05: 59: 00,1,702066688,0,0,0,0,0,0,0,0,0

2018-01 / 02 05: 44: 00,2018-01 / 02 05: 59: 00,1,702066688,2,0,0,0,0,0,0,0,0

2018-01 / 02 05: 44: 00,2018-01 / 02 05: 59: 00,1,702066688,3,0,0,0,0,919,0,0

2018-01 / 02 05: 44: 00,2018-01 / 02 05: 59: 00,1,702066688,4,0,0,0,0,0,0,0,0

2018-01 / 02 10: 44: 00,2018-01 / 02 10: 59: 00,1,702058496,0,0,0,0,0,0,0,0,0

2018-01 / 02 10: 44: 00,2018-01 / 02 10: 59: 00,1,702058496,2,0,0,0,0,0,0,0,0

tôi đã thử với lệnh sau.

aa = cat ATMIF.180102-0615 |grep -|awk -F ',' '{print $1}'; cho tôi vào cat ATMIF.180102-0615 |grep -|awk -F ',' '{print $1}'; làm ngày -d "$ aa" "+% s"; làm xong

nhưng nó báo lỗi là: ngày: ngày không hợp lệ 2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00' date: invalid date2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05 : 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018 -01-02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018- 01/02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10:44 : 00 \ n2018-01 / 02 10:44:00 'ngày: ngày không hợp lệ `2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05:44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01- 02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05: 44: 00 \ n2018-01 / 02 05:44:00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10:44:00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01- 02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10: 44: 00 \ n2018-01 / 02 10:44:00 '


tôi đã thử với lệnh sau. aa = cat ATMIF.180102-0615 |grep -|awk -F ',' '{print $1}'; cho tôi vào cat ATMIF.180102-0615 |grep -|awk -F ',' '{print $1}'; làm ngày -d "$ aa" "+% s"; xong
Mohan M

Câu trả lời:


0

Điều này sẽ làm điều đó, giả sử dữ liệu nằm trong:

IFS=,;while read line; do 
  ff=($line); 
  ff[0]=`date -d "${ff[0]}" +%s`;
  ff[1]=`date -d "${ff[1]}" +%s`;
  echo "${ff[*]}"; 
done < file.in > file.out

Lưu ý: bạn có thể cần thêm 'UTC' trong lệnh ngày theo định dạng gốc.

Bây giờ để thực hiện tại chỗ theo yêu cầu của bình luận của bạn, bạn cần lặp trên tất cả các tệp. Ví dụ: sử dụng lệnh find để khớp tất cả các tệp .csv theo cách đệ quy trong / mypath / to-files /:

for file in $(find /mypath/to-files -name "*.csv"); do
  cp $file /tmp/tmp.csv
  IFS=,;while read line; do 
      ff=($line); 
      ff[0]=`date -d "${ff[0]}" +%s`;
      ff[1]=`date -d "${ff[1]}" +%s`;
      echo "${ff[*]}"; 
    done < /tmp/tmp.csv > $file
done

Xin chào Tonic, Cảm ơn nhiều .. điều này đang hoạt động tốt. nhưng tôi đang cố gắng thay thế ngày đã chuyển đổi trong cùng một tệp thay vì chuyển hướng sang ngày mới, vì giống như tệp này, tôi có nhiều tệp được chuyển đổi mà tôi đang làm như dưới IFS =,; i = 1 đọc fn echo $ fn trong khi đọc dòng; làm ff = (dòng $); if [$ i -gt 1]; thì ff [0] = date -d "${ff[0]}" +%s; ff [1] = date -d "${ff[1]}" +%s; fi tiếng vang "$ {ff [*]}"; ((i = i + 1)) đã thực hiện <$ fn> tempfile cat tempfile> / tmp / MODIFIED / $ fn rm $ fn sẽ tạo một tệp mới theo đường dẫn khác.
Mohan M
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.