頭/尾の否定的な買収

頭/尾の否定的な買収

Mこの質問のバリエーションは、複数の場所で何度も要求された可能性があります。しかし、ファイルから最後の数行を削除しようとしましたが、運がありませんでした。

これ2番目に最も投票された回答存在するこの問題ファイルの最後の行を削除するには、次のことをお勧めします。

head -n -1 foo.txt > temp.txt

しかし、OSXとZshで試してみると、次のような結果が得られます。

head: illegal line count -- -1

なぜそんなことですか?どのように削除しますか?M 最後ワイヤーそしてこれ最初 N与えられたファイルの行?

ベストアンサー1

次のコマンドを使用して最初の12行を削除できます。

tail -n +13

(つまり、13行から印刷が始まります。)

headGNUがサポートするいくつかの実装は次のとおりですhead

head -n -12

しかし、これは標準ではありません。

tail -r file | tail -n +13 | tail -r

tail -rGNUもありますが、tac最適ではないシステムで実行できます。

n1 ここで:

sed '$d' file

次のようにすることもできます。

sed '$d' file | sed '$d'

2行を削除しますが、これが最善のオプションではありません。

あなたはできます:

sed -ne :1  -e 'N;1,12b1' -e 'P;D'

しかし、これは大きな値では機能しません。Nいくつかのsed実装で。

そしてawk

awk -v n=12 'NR>n{print line[NR%n]};{line[NR%n]=$0}'

m最初とn最後から行を削除するには:

awk -v m=6 -v n=12 'NR<=m{next};NR>n+m{print line[NR%n]};{line[NR%n]=$0}'

おすすめ記事