Shell Script : How to read each line from a file

ในการจัดการเกี่ยวกับไฟล์เรื่องนึงที่เราต้องเจอคือ การอ่านบรรทัดในไฟล์ทีละบรรทัดเพื่อนำข้อมูลนั้นไปใช้ เช่น การเขียน shell script เพื่ออ่าน error จาก log file เพื่อใช้เป็นตัวมอนิเตอร์ระบบแล้วจัดทำรายงานส่ง email ทำให้ผู้ดูแลระบบไม่ต้องเข้ามาเปิดอ่าน log file ดูทีละบรรทัด ทีละไฟล์ เพราะหากมี log file เป็นสิบๆไฟล์ ในแต่ละวันคงหมดไปกับการเปิด logfile นั่นเอง

สำหรับวิธีการอ่านไฟล์ทีละบรรทัด เราจะเรียกใช้คำสั่งผสมผสานกันดังนี้

$ cat | while read ; do

… 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”;
else echo “$line is odd number”;
fi

done
exit 0

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 นั่นเอง

You may also like...

Leave a Reply

Your email address will not be published.