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