M
この質問のバリエーションは、複数の場所で何度も要求された可能性があります。しかし、ファイルから最後の数行を削除しようとしましたが、運がありませんでした。
これ2番目に最も投票された回答存在するこの問題ファイルの最後の行を削除するには、次のことをお勧めします。
head -n -1 foo.txt > temp.txt
しかし、OSXとZshで試してみると、次のような結果が得られます。
head: illegal line count -- -1
なぜそんなことですか?どのように削除しますか?M
最後ワイヤーそしてこれ最初 N
与えられたファイルの行?
答え1
次のコマンドを使用して最初の12行を削除できます。
tail -n +13
(つまり、13行目から印刷が始まります。)
head
GNUがサポートするいくつかの実装は次のとおりですhead
。
head -n -12
しかし、これは標準ではありません。
tail -r file | tail -n +13 | tail -r
tail -r
GNUもありますが、tac
最適ではないシステムで実行できます。
n
1 ここで:
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}'
答え2
次の方法を使用して、最初のN行と最後のM行を削除できます。
N=5
、M=7
およびファイルの使用test.txt
:
sed -n -e "6,$(($(wc -l < test.txt) - 7))p" test.txt
このコマンドは、N+1 から LastLine-M までのすべての行を印刷します。
別のオプションはPythonを使用することです。
python -c 'import sys;print "".join(sys.stdin.readlines()[5:-7]),' < test.txt
アナコンダ3:
python -c 'import sys;print("".join(sys.stdin.readlines()[5:-7]))' < test.txt
既存のファイルを上書きするには:
python -c 'import sys;print("".join(sys.stdin.readlines()[5:-7]))' < test.txt > temp.txt && mv temp.txt test.txt
答え3
M
以下を使用して、ファイルから最後の行(ここではM = 100)を削除できます。
head -$(($(wc -l < foo.txt) - 100)) foo.txt > temp.txt