
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行の場合、最初のバージョンは印刷しなくてもまだすべての行が表示されます。一般的に私は明示的なので、最初のバージョンを好むが、長いファイルの場合、これははるかに高速です。データを最もよく知っているのはユーザーです。
または、以下を組み合わせて使用できますhead
。tail
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 src
and dest
in vim
(この-p
フラグはタブでパラメータを開きます):
vim -p src dest
10行目に移動します。 10行から100行すべてを選択し、埋め込みdest
タブに切り替えます。
10ggv101ygtp
ノート:101
101行目の先頭を選択します(\n
100行目の終わりをキャプチャします)。
これは明らかにコマンドラインツールを使用するよりも複雑なプロセスですが、視覚的な選択肢を提供するという利点があります(したがって、あなたが望むすべてを得ることができることは確かです)。しかし、これはまた良いユースケースのようです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