利用linux命令行工具進行文本行過濾

在平常工做中會遇到須要篩選過濾要查看的日誌等文本文件的任務,例如須要查看日誌文件的最後幾行等。 下面總結一下常見的對文本行過濾的方法。linux

經常使用命令行工具

接下來主要使用的是head,tail,sed和awk,這幾個工具。其中sed和awk工具很是強大,使用它們來進行文本的過濾可能有點大材小用,不過基本上全部的任務均可以經過head和tail兩個命令來完成,並且head和tail平常使用更加方便。工具

用法示例

準備工做

輸入下面命令,生成一個測試用的文件。測試

$ seq -f "Line No %g" 10 > lines.txt

只顯示文本的前3行

能夠經過head命令來完成,具體命令和輸出以下:命令行

$ head -n 3 lines.txt
Line No 1
Line No 2
Line No 3

或者經過sed命令來完成,具體命令和輸出以下:日誌

$ sed -n '1,3p' lines.txt
Line No 1
Line No 2
Line No 3

awk命令也能夠完成code

$ awk 'NR<=3' lines.txt
Line No 1
Line No 2
Line No 3

只顯示文本的最後3行

使用tail命令來完成,具體命令和輸出以下:awk

$ tail -n 3 lines.txt
Line No 8
Line No 9
Line No 10

只顯示文本的第5行到最後1行

使用tail命令來完成的方法:sed

$ tail -n +5 lines.txt
Line No 5
Line No 6
Line No 7
Line No 8
Line No 9
Line No 10

sed命令來完成:方法

$ sed -n '5,$p' lines.txt
Line No 5
--略--
Line No 10

用awk來完成:總結

$ awk 'NR>=5' lines.txt
Line No 5
--略--
Line No 10

只顯示文本的倒數第3行到第1行

用head來完成:

$ head -n -2 lines.txt
Line No 1
Line No 2
Line No 3
Line No 4
Line No 5
Line No 6
Line No 7
Line No 8

只顯示文本的第6行到第8行

用head和tail兩個工具:

$ < lines.txt head -n 8 | tail -n 3
Line No 6
Line No 7
Line No 8

sed的方法:

$ sed -n '6,8p' lines.txt
Line No 6
Line No 7
Line No 8

awk的方法:

$ awk '(NR>=6)&&(NR<=8)' lines.txt
Line No 6
Line No 7
Line No 8

只顯示文本奇數行或偶數行

sed命令生成奇數行

$ sed -n '1~2p' lines.txt
Line No 1
Line No 3
Line No 5
Line No 7
Line No 9

sed命令生成偶數行

$ sed -n '0~2p' lines.txt
Line No 2
Line No 4
Line No 6
Line No 8
Line No 10

awk命令生成奇數行

$ awk 'NR%2' lines.txt
Line No 1
Line No 3
Line No 5
Line No 7
Line No 9

awk命令生成偶數行

$ awk '(NR+1)%2' lines.txt
Line No 2
Line No 4
Line No 6
Line No 8
Line No 10

小結

linux系統的一個有名的特色是絕大多少文件都是文本文件,這些文件均可以經過上面的方法來查看特定的行。另外linux命令行工具也很是靈活,完成一件任務,不是隻有一種方法,有不少方法能夠實現,這也是linux好玩的地方。在文本過濾方面,sed和awk命令還有不少強大的用法,你們有興趣的話能夠深刻研究一下。

參考文獻:

《命令行中的數據科學》 Jeroen Janssens著

相關文章
相關標籤/搜索