Unix 上のテキスト ファイルから、あらかじめ決められた範囲の行を抽出するにはどうすればよいでしょうか? 質問する

Unix 上のテキスト ファイルから、あらかじめ決められた範囲の行を抽出するにはどうすればよいでしょうか? 質問する

複数のデータベースに相当するデータを含む約 23,000 行の SQL ダンプがあります。このファイルの特定のセクション (つまり、単一のデータベースのデータ) を抽出し、新しいファイルに配置する必要があります。必要なデータの開始行番号と終了行番号はわかっています。

たとえば、ファイルから 16224 行目から 16482 行目までのすべての行を抽出し、新しいファイルにリダイレクトする Unix コマンド (または一連のコマンド) を知っている人はいますか?

ベストアンサー1

sed -n '16224,16482p;16483q' filename > newfile

からsed マニュアル:

p - パターン スペースを (標準出力に) 出力します。このコマンドは通常、-n コマンドライン オプションと組み合わせてのみ使用されます。

n - 自動印刷が無効になっていない場合は、パターン スペースを印刷し、その後、パターン スペースを次の入力行に置き換えます。入力がなくなると、sed はそれ以上のコマンドを処理せずに終了します。

q -sedこれ以上のコマンドや入力を処理せずに終了します。-n オプションで自動印刷が無効になっていない場合は、現在のパターン スペースが印刷されることに注意してください。

そして

sed スクリプト内のアドレスは、次のいずれかの形式になります。

行番号を指定すると、入力内のその行のみに一致します。

アドレス範囲は、2 つのアドレスをコンマ (,) で区切って指定できます。アドレス範囲は、最初のアドレスが一致する行から始まり、2 番目のアドレスが一致するまで続きます (範囲を含む)。

おすすめ記事