Bash Shell Pipeline 將資料一行一行分開處理 (read + while)

Linux Shell 處理資料, 大多都用 cat、sed、grep、awk ... 等等, 但這些都是對整堆資料處理, 若需要將這些資料額外一行一行拉出來另外處理的時候, 於 Shell script 要怎麼做?

Bash Shell Pipeline 將資料一行一行分開處理 (read + while)

Shell script 要將資料一行一行處理, 可以使用 read 配合 while 來作到.

  • ex: while read -r line ... do / done, line 是變數, 就是當行的資料.

範例

  1. vim /tmp/example.log
    10,10.10.1.1
    20,192.168.0.1
    c30,168.95.1.1
    c40,8.8.8.8
    c50,8.8.4.4
  2.  註: 在下述處理寫的比較複雜點(把 , => ' ', 然後下面再多依照空白分割一次), 是因為一般前後都還會有很多沒用的資料.
  3. 將 IP 分開, 再分別 ping 一次 (while / read -r 會將每行的資料存到 $line 的變數去), 程式碼如下:
    cat /tmp/example.log | grep '^c' | awk -F"," '{print $1, $2}' | while read -r line
    do
        id=`echo $line | awk '{print $1}'`
        ip=`echo $line | awk '{print $2}'`
        echo "$id $ip"
        echo $id `ping -c 1 $ip`
    done
  4. 將上述存成 ip-ping.sh, 下次使用就會方便許多~

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料