Shell循環讀取文件每一行

Shell編程是Linux系統下的一種腳本語言,通過Shell循環讀取文件每一行可以實現很多實用的功能,如日誌分析、數據統計等。本文將從多個方面來詳細闡述Shell循環讀取文件每一行的使用方法。

一、讀取文件中每一行的數據

#!/bin/bash
# 從文件中讀取每一行數據
while read line
do
  echo ${line}
done < file.txt

上述代碼通過一個while循環,從文件file.txt中逐行讀取數據並輸出到屏幕上。

其中read命令用於讀取一行數據,並將其存儲到變數line中。注意,在read命令後面加了一個小於號,表示從文件中讀取數據。

需要注意的是,在使用shell腳本操作文件時,最好使用絕對路徑,以免出現路徑不一致的錯誤。

二、處理文件中的每一行數據

#!/bin/bash
# 處理文件中的每一行數據
while read line
do
  # 處理每一行數據
  data=$(echo "${line}" | awk '{print $1}')
  echo ${data}
done < file.txt

上述代碼在讀取每一行數據後,使用awk命令將其中的第一個單詞提取出來,並存儲到變數data中。

可以根據需要修改awk命令中的參數來提取不同位置的數據。另外,處理數據的過程也可以是一個完整的函數,以便於代碼的重複利用。

三、過濾文件中的指定數據

#!/bin/bash
# 過濾文件中的指定數據
while read line
do
  # 過濾數據
  if [[ ${line} == *"target"* ]]
  then
    echo ${line}
  fi
done < file.txt

上述代碼通過使用if語句對每一行數據進行過濾,只輸出其中包含「target」字元串的數據。

在if語句中使用了雙括弧,是因為包含了特殊字元「*」,單括弧不能起到字元串匹配的作用。

四、逐行讀取多個文件

#!/bin/bash
# 逐行讀取多個文件
for file in file1.txt file2.txt file3.txt
do
  while read line
  do
    echo ${line}
  done < ${file}
done

上述代碼通過for循環,逐個讀取文件file1.txt、file2.txt和file3.txt中的數據,並輸出到屏幕上。

可以根據需要修改for循環中的文件名列表,以實現對多個文件的批量處理。

五、處理大文件中的數據

#!/bin/bash
# 處理大文件中的數據
while read -r line
do
  # 處理每一行數據
  data=$(echo "${line}" | awk '{print $1}')
  echo ${data}
done < <(tail -f bigdata.log)

上述代碼通過使用tail命令的-f選項,實現對一個大文件的實時追蹤。

在while循環中,使用-r選項可以防止特殊字元的轉義,如反斜杠「\」。

需要注意的是,在處理大文件時,要注意系統資源的利用情況,以免出現系統崩潰等情況。

原創文章,作者:XIAWP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/360549.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XIAWP的頭像XIAWP
上一篇 2025-02-24 00:33
下一篇 2025-02-24 00:33

相關推薦

發表回復

登錄後才能評論