1. ホーム
  2. unix

[解決済み] Unixでテキストファイルからあらかじめ決められた範囲の行を抽出するには?

2022-03-16 21:57:13

質問

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

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

解決方法は?

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

から セッドマニュアル :

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

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

q - 出口 sed これ以上のコマンドや入力を処理せずに なお,-nオプションで自動印刷が無効になっていない場合は,現在のパターンスペースが印刷されます.

sedスクリプトのアドレスは、以下のいずれかの形式をとることができます。

番号 行番号を指定すると、入力の中のその行のみにマッチします。

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