最後のn行を除いてすべてのファイルを印刷する方法(POSIXコマンドライン)はありますか?ユースケースでは、サイズを不明な複数のファイルがあります。これらのファイルには、削除したい既知のサイズの定型フッターが含まれています。私はそれを自分で書く前にすでにこれを行うユーティリティがあるのだろうかと思っていました。最後のn行を除いてすべてを逆/印刷しますか?
答えて
head(1) - GNU由来、特にBSD由来ではありません - これを行う機能があります。印刷する行数に負の数を使用すると、ファイルの先頭には終わりが表示されます。そのよう
:
head -n -10 textfile
:head
のmanページから
sed '/FIRST_LINE_OF_FOOTER/q' filename
フッターの最初の行を印刷します。あなたはそれを避けたい場合:
sed -n '/FIRST_LINE_OF_FOOTER/q;p' filename
これは、将来的にはフッターの変化の大きさならばラインを数えるよりも堅牢である可能性があります。
システムのhead
コマンドがhead -n -10
をサポートしていない場合は、表示する行数を事前に計算することもできます。以下は、bashの固有の構文に依存します:head -NUMBER
構文は下位互換性のためにhead
の一部のバージョンでサポートされていることを
lines=$(wc -l < filename) ; ((lines -= 10)) ; head -$lines filename
注意。 POSIXはhead -n NUMBER
フォームのみを許可します。 POSIXではまた、-n
への引数が正の10進整数であることだけを許可します。 head -n 0
は必ずしもノーオペレーションである必要はありません。
A POSIX準拠のソリューションです:
lines=$(wc -l < filename) ; lines=$(($lines - 10)) ; head -n $lines filename
あなたは古代の事前POSIXシェルに対処する必要がある場合は、あなたがこれを検討するかもしれない:場合は、これらのいずれもが奇数のことを行う可能性があります
lines=`wc -l < filename` ; lines=`expr $lines - 10` ; head -n $lines filename
ファイルは10行以下です。
POSIXは古代のコマンド置換のバックチックに加えて '$(...)'という構文もあり、 '$ ((...)) '算術展開。したがってバックテックと 'expr'で古代に行く必要はありません。 [POSIXコマンド置換](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_03) – geirha
@geirha:良い点ですが、特にPOSIXについて質問しました。しかし、古いPOSIXシェルがまだ使用されている場合には、古い構文を知っておくと便利です。 –
標準的なコマンドはありませんが、N行のバッファにawkまたはsedを使用していっぱいになると印刷できます。例えば。awkを持つ:
awk -v n=5 '{if(NR>n) print a[NR%n]; a[NR%n]=$0}' file
を見て、おそらく以下「WC」+「やる数学」+「尾」の方法よりも効率的で、もっと簡単:NUM
がより1にある
tail -r file.txt | tail +NUM | tail -r
あなたが削除したい終了行の数、例えば+11は最後の10行を除くすべての行を出力します。これは、head -n -NUM
構文をサポートしていないBSDで動作します。
簡単です。あなたは避けたい行の数に+を追加する必要があります。
この例では(はい、いない最初の10 ...あなたがしたい場合、それは...違うカウントされるため、あなたに
inputfileに10 -n最初の9
尾を除くすべての行を提供します10、ちょうど tail -n 11入力ファイルを入力してください)
- 1. 最後のn行のファイルをcを使用して印刷します。
- 2. ベクターを逆転して印刷する
- 3. SQL一意の値ごとに最後のN行から離れた行をすべて削除します
- 4. Linux、ファイル内のすべての行を印刷します.
- 5. 最後のn行を新しいファイルにコピーして元のn行を削除する
- 6. C++リンクリストプログラム最後のデータ項目をn回印刷
- 7. TextViewで数学的な表を印刷しようとしています。その唯一のテーブルの最後の行を印刷しますか?
- 8. 入力の最後にすべての出力を印刷する方法
- 9. CSVファイルを繰り返して行を印刷すると、最初の行だけが印刷されます。
- 10. VBA:最後の行のExcelに印刷
- 11. 最後のレコードをスコープNの逆順で照会します。
- 12. inorder traversalからのすべてのバイナリツリーを印刷します
- 13. ログインしているすべてのユーザーをSESSIONに印刷しますか?
- 14. ファイルから重複を削除し、逆のステートメントで印刷します。
- 15. 美しいスープで最初と最後の1000行を印刷するには
- 16. Pythonでファイルから3番目(またはn番目)の行をすべて印刷する方法は?
- 17. ハイチャート:「すべて印刷」ボタン
- 18. 最後に印刷された文字を削除するpython
- 19. sedを使って最後の非空白行を印刷するには?
- 20. idで0の最後のn行を削除し、最後にidで最後のn個の要素を削除します。
- 21. 印刷コンマ最後の1
- 22. Cで改行を印刷するにはprintf( "\ n")かputchar( '\ n')を使うべきですか?
- 23. 逆のツリーレベルを印刷
- 24. すべてのC#コンソールアプリケーションを印刷
- 25. カードのデッキを印刷し、シャッフルして再印刷します。
- 26. ファイルから読み取っていますが、最後の行を印刷できません。
- 27. 入力ストリームの最後からNバイトを削除します
- 28. テーブルのすべての行を印刷する
- 29. 私はawkを使って並べ替えられたフィールドを印刷し、次に4番目のフィールドから最後まで印刷したい
- 30. コードは\ nでカンマで印刷されています
しかし、POSIXでは、-nは正の整数でなければなりません。 – choroba
厳密なPOSIXに対して十分真です。私は私の "最も"と明確になっていたはずです。より速く汚れたPOSIXメソッドを使うつもりなら、私は 'wc -l'といくつかの計算に' head'に渡す値を与えると仮定します。 –
head(1)のほとんどの実装にはこの機能がありません。私が知っている実装では、この移植不可能なコードがあります。 –