GNU/Linux >> Linux の 問題 >  >> Linux

Linuxでテキストファイルから特定の行を表示するには?

解決策 1:

sed -n '10000000,10000020p' filename

次のように少しスピードアップできるかもしれません:

sed -n '10000000,10000020p; 10000021q' filename

これらのコマンドでは、オプション -n sed を引き起こす 「パターンスペースの自動印刷を抑制する」。 p コマンド「print[s] the current pattern space」と q コマンド「これ以上入力を処理せずに sed スクリプトを直ちに終了します...」 引用は sed からのものです man ページ。

ところで、あなたの命令

tail -n 10000000 filename | head 10

最後から 1,000 万行目から開始 ファイルの「中間」コマンドは、先頭から 1,000 万番目から始まるように見えます。 これは次と同等です:

head -n 10000010 filename | tail 10

問題は、可変長の行を持つソートされていないファイルの場合、改行をカウントするファイルを処理する必要があることです。それをショートカットする方法はありません。

ただし、ファイルがソートされている場合 (たとえば、タイムスタンプ付きのログ ファイル)、または固定長の行がある場合は、バイト位置に基づいてファイルをシークできます。ログ ファイルの例では、Python スクリプト here* が行うように、時間の範囲でバイナリ検索を実行できます。固定レコード長ファイルの場合は、実に簡単です。 linelength * linecount を求めるだけです

解決策 2:

sed の次の使用法を見つけました

sed -n '10000000,+20p'  filename

誰かの役に立てば幸いです!

解決策 3:

ここに投稿するのは初めてです!とにかく、これは簡単です。 file.txt というファイルから 8872 行目を取り出したいとしましょう。方法は次のとおりです。

cat -n file.txt | grep '^ *8872'

問題は、この後の 20 行を見つけることです。これを達成するには、

cat -n file.txt | grep -A 20 '^ *8872'

前後の行については、grep マニュアルの -B および -C フラグを参照してください。


Linux
  1. Linuxでファイルの終わりにテキストを追加する方法

  2. Sedを使用してテキストファイルから複数のランダム行を削除する方法は?

  3. Linuxでテキストファイルからバイナリを見分ける方法

  1. Linuxでファイルの終わりにテキストを簡単に追加する方法

  2. Linuxコマンドラインでファイルの特定の行を表示する方法

  3. テキスト ファイルから改行を削除するにはどうすればよいですか?

  1. UNIX/Linux でファイルの行数を数える方法

  2. Linux - 特定の行からファイルの最後までの grep

  3. Linux で URL からファイルをダウンロードする方法