Linux

如何在 Linux 中顯示文本文件中的某些行?

  • May 10, 2021

我想每個人都知道有用的 Linux 命令行實用程序headtail. 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在文件中查找字元。

  • 我一直想發布對該腳本的另一個更新。也許我會在這些日子裡解決它。

引用自:https://serverfault.com/questions/133692