การแยกวันที่ออกจากสตริง

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