Linux
如何在 Linux 中顯示文本文件中的某些行?
我想每個人都知道有用的 Linux 命令行實用程序
head
和tail
.head
允許您列印文件的前 X 行,tail
執行相同但列印文件末尾。列印文件中間的好命令是什麼?類似的東西middle --start 10000000 --count 20
(列印第 10'000'000 行直到第 10'000'010 行)。我正在尋找可以有效處理大文件的東西。我試過
tail -n 10000000 | head 10
了,速度太慢了。
sed -n '10000000,10000020p' filename
您可能可以像這樣加快速度:
sed -n '10000000,10000020p; 10000021q' filename
在這些命令中,該選項
-n
會導致sed
“抑制模式空間的自動列印”。命令“p
列印$$ s $$目前模式空間”和
q
命令“立即退出$$ s $$sed 腳本沒有處理任何更多的輸入……”引號來自sed
man
頁面。 順便說一句,你的命令tail -n 10000000 filename | head 10
從文件末尾的第 10 行開始,而您的“中間”命令似乎從開頭的第 10 行開始,這相當於:
head -n 10000010 filename | tail 10
問題是對於具有可變長度行的未排序文件,任何程序都必須通過文件計數換行符。沒有捷徑可走。
但是,如果文件已排序(例如,帶有時間戳的日誌文件)或具有固定長度的行,則您可以根據字節位置查找文件。在日誌文件範例中,您可以像我在此處的 Python 腳本* 那樣執行一定範圍內的二進制搜尋。在固定記錄長度文件的情況下,這真的很容易。您只需
linelength * linecount
在文件中查找字元。
- 我一直想發布對該腳本的另一個更新。也許我會在這些日子裡解決它。