Bash:
การแยกวันที่ออกจากสตริง
วิธีการ:
Bash เองมีความสามารถในการแยกวิเคราะห์วันที่โดยตรงที่จำกัด มักพึ่งพาเครื่องมือภายนอกเช่น date และ awk สำหรับการจัดการที่ซับซ้อนมากขึ้น นี่คือวิธีที่คุณสามารถแยกแบบฉบับที่เฉพาะเจาะจงแล้วใช้มันกับคำสั่ง date เพื่อแปลงหรือดำเนินการ
ตัวอย่างที่ 1: สกัดสตริงวันที่และแปลงไปยังรูปแบบอื่น
สมมติว่าคุณมีวันที่ในรูปแบบ yyyy-mm-dd และคุณต้องการแปลงให้เป็น dd-mm-yyyy
original_date="2023-04-01"
formatted_date=$(date -d $original_date '+%d-%m-%Y')
echo $formatted_dateผลลัพธ์ตัวอย่าง:
01-04-2023นี่ใช้คำสั่ง date กับตัวเลือก -d เพื่อระบุสตริงวันที่นำเข้า และ +%d-%m-%Y เพื่อกำหนดรูปแบบการแสดงผล
ตัวอย่างที่ 2: ใช้ awk เพื่อแยกวันที่จากบรรทัดของข้อความที่มีโครงสร้างและแปลงมัน
ถ้าสมมติว่าคุณมีบรรทัดของไฟล์บันทึก:
2023-04-01 12:00:00 User logged inคุณสามารถสกัดและแปลงส่วนวันที่โดยใช้ awk และ date
log_line="2023-04-01 12:00:00 User logged in"
date_part=$(echo $log_line | awk '{print $1}')
formatted_date=$(date -d $date_part "+%A, %B %d, %Y")
echo $formatted_dateผลลัพธ์ตัวอย่าง:
Saturday, April 01, 2023ตัวอย่างนี้ใช้ awk ในการแยกบรรทัดบันทึกและสกัดส่วนวันที่ ($1 หมายถึงฟิลด์ที่เป็นพื้นที่แยกกันตัวแรก), แล้วจึงใช้ date ในการจัดรูปแบบใหม่
การใช้เครื่องมือของบุคคลที่สาม
สำหรับการแยกวิเคราะห์ที่ซับซ้อนมากขึ้นหรือเมื่อต้องจัดการกับรูปแบบวันที่ที่หลากหลาย เครื่องมือของบุคคลที่สามเช่น dateutils อาจมีประโยชน์มาก
ตัวอย่างกับ dateutils:
สมมุติว่าคุณมีสตริงวันที่ในรูปแบบที่ไม่เป็นมาตรฐาน ตัวอย่างเช่น April 01, 2023
original_date="April 01, 2023"
formatted_date=$(dateconv -i "%B %d, %Y" -f "%Y-%m-%d" <<< $original_date)
echo $formatted_dateผลลัพธ์ตัวอย่าง:
2023-04-01คำสั่งนี้ใช้ dateconv จาก dateutils, โดยระบุรูปแบบนำเข้าด้วย -i และรูปแบบผลลัพธ์ที่ต้องการด้วย -f dateutils รองรับช่วงกว้างของรูปแบบวันที่และเวลา ทำให้มีความยืดหยุ่นมากสำหรับงานแยกวิเคราะห์วันที่ในสคริปต์ Bash