この質問の変種は確かにさまざまな場所で何度か尋ねられましたが、私は運が悪いとファイルから最後のM
行を削除しようとしています。
2番目に投票された回答この質問 では、次のようにしてファイルの最後の行を削除することをお勧めします。
head -n -1 foo.txt > temp.txt
しかし、OSXとZshでそれを試すと、次のようになります。
head: illegal line count -- -1
何故ですか? M
last行とを削除するにはどうすればよいですかfirstN
指定されたファイルの行?
最初の12行を削除するには、次のようにします。
tail -n +13
(つまり、13行目からの印刷を意味します。)
GNU head
サポートのようなhead
のいくつかの実装:
head -n -12
しかし、それは標準ではありません。
tail -r file | tail -n +12 | 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'
ただし、一部のsed
実装ではnの大きな値では機能しないことに注意してください。
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}'
次の方法を使用して、最初の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
次のようにして、ファイルから最後のM
(ここではM = 100)行を削除できます。
head -$(($(wc -l < foo.txt) - 100)) foo.txt > temp.txt