
文書に何行があるかわからないので、文書を逆方向に出力するhead
方法はありますか?tail
foo.txt
つまり、最初の2行を除くすべての内容を別の文書に追加したいと思います。
答え1
これを利用して剥がしてください。最初2行:
tail -n +3 foo.txt
これは脱皮用です。最後実装でhead
サポートされている場合は2行:
head -n -2 foo.txt
(ファイルが\n
後者で終わると仮定)
標準的な使用法と同様に、tail
これらのhead
操作は破壊的ではありません。>out.txt
出力を新しいファイルにリダイレクトするには、次のようにします。
tail -n +3 foo.txt >out.txt
すでに存在する場合はout.txt
ファイルを上書きします。出力>>out.txt
を。>out.txt
out.txt
答え2
最初のN-1行を除くすべての行が必要な場合は、tail
number oflinesを呼び出します+N
。 (数字は最初に保持したい行の行番号です。1から始まります。つまり、+1は一番上から始まり、+2は行をスキップすることを意味します。)
tail -n +3 foo.txt >>other-document
最後のN行をスキップする簡単で移植可能な方法はありません。 GNUはasをhead
受け入れます。そうでない場合(たとえば、GNUまたはBusybox)、これをテールと組み合わせることができます。head -n +N
tail -n +N
tac
tac | tail -n +3 | tac
移植可能なawkフィルタ(テストされていない)を使用できます。
awk -vskip=2 '{
lines[NR] = $0;
if (NR > skip) print lines[NR-skip];
delete lines[NR-skip];
}'
大きなファイルから最後の数行を削除するには、切り取りたいセクションのバイトオフセットを決定し、切り取りを使用できますdd
。
total=$(wc -c < /file/to/truncate)
chop=$(tail -n 42 /file/to/truncate | wc -c)
dd if=/dev/null of=/file/to/truncate seek=1 bs="$((total-chop))"
ファイルを最初から切り取ることはできませんが、大容量ファイルの最初の数行を削除する必要がある場合は、次のようにします。モバイルコンテンツ。
答え3
最初のn行を削除するには、GNU sedを使用できます。たとえば、n = 2の場合
sed -n '1,2!p' input-file
これは「この範囲を除外する」という意味です!
。想像できるように、より複雑な結果を得ることができます。
sed -n '3,5p;7p'
行3,4,5,7が表示されます。アドレスの代わりに正規表現を使用すると、より多くのパフォーマンスが得られます。
制限は、行番号を事前に知っておく必要があることです。
答え4
{ head -n2 >/dev/null
cat >> other_document
} <infile
もし<infile
正規、lseek()
-ableファイルなら、はい、何でも構いません。上記は完全にPOSIXをサポートする構成です。