最後の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. SQL一意の値ごとに最後のN行から離れた行をすべて削除します
- 2. Linux、ファイル内のすべての行を印刷します.
- 3. ログインしているすべてのユーザーをSESSIONに印刷しますか?
- 4. inorder traversalからのすべてのバイナリツリーを印刷します
- 5. ファイルから重複を削除し、逆のステートメントで印刷します。
- 6. Pythonでファイルから3番目(またはn番目)の行をすべて印刷する方法は?
- 7. ハイチャート:「すべて印刷」ボタン
- 8. sedを使って最後の非空白行を印刷するには?
- 9. 印刷コンマ最後の1
- 10. すべてのC#コンソールアプリケーションを印刷
- 11. コードは\ nでカンマで印刷されています
- 12. Cで改行を印刷するにはprintf( "\ n")かputchar( '\ n')を使うべきですか?
- 13. 奇妙なリストの印刷機能の動作。もし私が "\ n"を印刷しても、それを取り除くとうまくいかない。
- 14. 複数行のテキストボックス入力を制限してすべてを印刷する
- 15. MS SQL Nの最後のインスタンスの後のすべての行を返します
- 16. Google Chromeのすべてのページのヘッダーを印刷します
- 17. プロセスのすべてのスレッドのスレッドを印刷します
- 18. Pythonのすべての行の先頭に文字を印刷します
- 19. ScrollViewer - Silverlightのすべてのコンテンツを印刷します
- 20. 行にテキストファイルを印刷しようとしています
- 21. 最後に改行を印刷しないでpythonスクリプトを実行しますか?
- 22. ロードされているすべてのSpring Beanを印刷します。
- 23. 以前のN行が特定の条件を満たしている大きなファイルからすべての行を印刷する
- 24. 最後のカンマを削除するか、すべてのMySQL/PHPで印刷されないようにします。
- 25. JSoupがHTMLテーブル行のすべての要素を印刷しない
- 26. ワンクリックで複数の画像を印刷するwinformsですべてを印刷
- 27. ファイルから文字列を検索して印刷すると、必要な行の代わりにすべての行が印刷されます
- 28. awkを使用してファイルの最後のレコードを印刷する方法は?
- 29. 最初と最後のn行を取り除く
- 30. データフレーム内のn番目の行をすべて削除する
しかし、POSIXでは、-nは正の整数でなければなりません。 – choroba
厳密なPOSIXに対して十分真です。私は私の "最も"と明確になっていたはずです。より速く汚れたPOSIXメソッドを使うつもりなら、私は 'wc -l'といくつかの計算に' head'に渡す値を与えると仮定します。 –
head(1)のほとんどの実装にはこの機能がありません。私が知っている実装では、この移植不可能なコードがあります。 –