讀取文件,文件內容包含空格Tab和回車提取想要的數據

 

讀取文件,文件內容包含空格Tab和回車提取想要的數據

今天寫了shell腳本,主要目的是將uniq過濾的數據,在次過濾下,原數據中是些ip的訪問記錄,一行一個ip,想將訪問的ip重複的過濾,使用了sort|uniq -c,過濾了重複的數據,並將每一個ip的訪問次數寫在前面,顯示的格式是以下:shell

  4  192.168.1.3spa

  1  102.173.2.1ip

  3  123.71.43.6it

獲得這個結果後,想將次數小於2次的數據提取出來,開始以爲很簡單,直接一個for in $(cat ip.txt)循環,在取第一個值,進行判斷,<2的將ip提出來追加到另一個文件中,結果文件中保存的都是次數,不是ip,查了下資料,發現若是輸入文本中包括空格或製表符,則不是換行讀取,line在輸入文本中按空格分隔符或製表符或換行符特環取值,解決方法:能夠經過把IFS設置爲換行符來達到逐行讀取的功能.io

OLDIFS=$IFSfor循環

IFS=$'\n'class

for i in $(cat ip.txt)效率

...awk

IFS=$OLDIFSList

可是由於文件太大分析的速度太慢了,使用awk來過濾發現速度比讀取每行過濾效率提升的多,方法:使用cat $1 |awk '{if($1<'$2'){printf $2} printf "\n" }'過濾符合條件的文件,結果在去掉空行。

這種方法不用for循環,不用設置IFS,並且執行效率比for強的不少,awk很牛!!!

相關文章
相關標籤/搜索