แปลงวันที่เป็นรูปแบบยุคในไฟล์สำหรับหลายรายการโดยใช้เชลล์สคริปต์


-1

ด้านล่างเป็นรูปแบบในไฟล์ ใครสามารถช่วยในการแปลงสองคอลัมน์แรกซึ่งอยู่ในรูปแบบวันที่เพื่อจัดรูปแบบยุค?

2018-01-02 05: 44: 00,2018-01-02 05: 59: 00,1,702058496,0,0,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,0

2018-01-02 05: 44: 00,2018-01-02 05: 59: 00,1,702058496,3,332,0,0,0,0,332,032

2018-01-02 05: 44: 00,2018-01-02 05: 59: 00,1,702058496,4,0,0,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,0,0

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

2018-01-02 05: 44: 00,2018-01-02 05: 59: 00,1,702062592,3,919,0,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,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,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,0,0

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

2018-01-02 05: 44: 00,2018-01-02 05: 59: 00,1,702066688,4,0,0,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,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,0

ฉันพยายามด้วยคำสั่งดังต่อไปนี้

AA = cat ATMIF.180102-0615 |grep -|awk -F ',' '{print $1}'; สำหรับฉันค่ะ cat ATMIF.180102-0615 |grep -|awk -F ',' '{print $1}' ; do date -d "$ aa" "+% s"; เสร็จแล้ว

แต่มันให้ข้อผิดพลาดเป็น: วันที่: วันที่ไม่ถูกต้อง 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 date 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 ' วันที่: วันไม่ถูกต้อง `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 '


ฉันพยายามด้วยคำสั่งดังต่อไปนี้ AA = cat ATMIF.180102-0615 |grep -|awk -F ',' '{print $1}'; สำหรับฉันค่ะ cat ATMIF.180102-0615 |grep -|awk -F ',' '{print $1}' ; do date -d "$ aa" "+% s"; เสร็จแล้ว
Mohan M

คำตอบ:


0

สิ่งนี้จะทำโดยสมมติว่าข้อมูลอยู่ใน:

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

หมายเหตุ: คุณอาจต้องเพิ่ม 'UTC' ในคำสั่ง date ตามรูปแบบดั้งเดิม

ตอนนี้เพื่อทำมันในสถานที่ตามความคิดเห็นของคุณถามคุณจะต้องวนซ้ำในไฟล์ทั้งหมด ตัวอย่างเช่นการใช้คำสั่ง find เพื่อจับคู่ไฟล์. csv ทั้งหมดซ้ำใน / 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

สวัสดี Tonic ขอบคุณมาก .. มันใช้งานได้ดี แต่ฉันพยายามที่จะแทนที่วันที่แปลงเป็นไฟล์เดียวกันแทนที่จะเปลี่ยนเส้นทางไปที่ใหม่เช่นเดียวกับไฟล์นี้ฉันมีไฟล์มากมายที่จะถูกแปลงซึ่งฉันกำลังทำอยู่ด้านล่าง IFS =,; i = 1 อ่าน fn echo $ fn ในขณะที่อ่านบรรทัด ทำ ff = ($ line); ถ้า [$ i -gt 1]; ดังนั้น ff [0] = date -d "${ff[0]}" +%s; ff [1] = date -d "${ff[1]}" +%s; fi echo "$ {ff [*]}"; ((i = i + 1)) เสร็จสิ้น & lt; $ fn & gt; tempfile cat tempfile & gt; / tmp / MODIFIED / $ fn rm $ fn ซึ่งจะสร้างไฟล์ใหม่ในเส้นทางที่แตกต่างกัน
Mohan M
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.