200行のファイルのうち10から100行を新しいファイルに入れる方法

200行のファイルのうち10から100行を新しいファイルに入れる方法

200行のファイルがあります。

10〜100行を抽出して新しいファイルに入れる必要があります。

UNIX / Linuxでこれを行うにはどうすればよいですか?

使用できるコマンドは何ですか?

答え1

使用sed:

sed -n -e '10,100p' input.txt > output.txt

sed -n方法いいえデフォルトでは、すべての行が印刷されます。-e次のパラメーターがsedスクリプトで実行されることを示します。 10行から100行(含む)までその行を10,100p印刷()することを意味するsedスクリプトです。pその後、出力はoutput.txt

ファイルが提案されたものより長い場合、このバージョン(コメントで提案されている)はより速くなります。

sed -e '1,9d;100q'

これは意味する削除ライン1-9、辞める100行目以降の残りの部分を印刷します。 200行の場合はこれは重要ではありませんが、200,000行の場合、最初のバージョンは印刷しなくてもまだすべての行が表示されます。一般的に私は明示的なので、最初のバージョンを好むが、長いファイルの場合、これははるかに高速です。データを最もよく知っているのはユーザーです。

または、以下を組み合わせて使用​​できますheadtail

tail -n +10 input.txt | head -n 91 > output.txt

今回は、tail -n +10ファイル全体を10行から印刷し、head -n 91最初の91行(元のファイルの最大100行)を印刷します。output.txt同じ方法でリダイレクトされます。

答え2

これはしなければならない

tail -n +10 file.txt | head -n 91 > newfile.txt

答え3

でこれを行う場合はvim非常に簡単です。ファイル名が指定されていsrcて、行を移動したいファイルがあるとしますdest。ファイルdestがまだ存在しない場合は、次のように生成します。

touch dest

次に、open srcand destin vim(この-pフラグはタブでパラメータを開きます):

vim -p src dest

10行目に移動します。 10行から100行すべてを選択し、埋め込みdestタブに切り替えます。

10ggv101ygtp

ノート101101行目の先頭を選択します(\n100行目の終わりをキャプチャします)。


これは明らかにコマンドラインツールを使用するよりも複雑なプロセスですが、視覚的な選択肢を提供するという利点があります(したがって、あなたが望むすべてを得ることができることは確かです)。しかし、これはまた良いユースケースのようですawk

awk 'NR==10, NR==100' src > dest

このNR変数を使用すると、行数に基づいてパターンマッチングを実行できます。したがって、上記のコマンドは10-100行を抽出し、シェルsrcから出力をdest

答え4

さまざまな方法でこれを実行できます。

解決策awk

$ awk 'NR<10{next};1;NR>100{exit}' file > new_file

一方perl通行:

$ perl -nle '
    print if $. > 9 and $. < 101;
    exit if $. > 100;
' file > new_file

関連情報