Shell Script : How to read each line from a file
ในการจัดการเกี่ยวกับไฟล์เรื่องนึงที่เราต้องเจอคือ การอ่านบรรทัดในไฟล์ทีละบรรทัดเพื่อนำข้อมูลนั้นไปใช้ เช่น การเขียน shell script เพื่ออ่าน error จาก log file เพื่อใช้เป็นตัวมอนิเตอร์ระบบแล้วจัดทำรายงานส่ง email ทำให้ผู้ดูแลระบบไม่ต้องเข้ามาเปิดอ่าน log file ดูทีละบรรทัด ทีละไฟล์ เพราะหากมี log file เป็นสิบๆไฟล์ ในแต่ละวันคงหมดไปกับการเปิด logfile นั่นเอง
สำหรับวิธีการอ่านไฟล์ทีละบรรทัด เราจะเรียกใช้คำสั่งผสมผสานกันดังนี้
$ cat … action … done |
ตัวอย่าง 1 มีไฟล์ที่เก็บตัวเลขชื่อ number.txt เราต้องการเช็คดูว่าตัวเลขแต่ละบรรทัดเป็น เลขคู่(even number) หรือ เลขคี่(odd number)
number.txt |
11 34 56 98 21 |
example shell script |
#!/bin/sh
read_file=number.txt; /bin/cat $read_file | while read line ; do res=`expr $line % 2` ; if [ $res -eq 0 ]; then echo “$line is even number”; done |
Result |
11 is odd number 34 is even number 56 is even number 98 is even number 21 is odd number |
- /bin/cat $read_file | while read line ; do
จากตัวอย่างเราทำการอ่านไฟล์ทั้งหมดด้วยคำสั่ง /bin/catแล้วส่งไปเข้า while loop เพื่ออ่านทีละบรรทัดด้วยคำสั่ง read โดยค่าที่อ่านได้อยู่ในตัวแปรชื่อ line - res=`expr $line % 2` ;
นำตัวแปร line ซึ่งมีค่าตัวเลขแต่ละบรรทัดมาหาเศษจากการหารด้วย 2 ถ้าเป็น 0 คือเลขคู่ โดยเก็บผลลัพธ์ที่ตัวแปร res นั่นเอง