テキスト文書の最後の段落を表示するには?

テキスト文書の最後の段落を表示するには?

単語数が100個が少し以上の3つの小さな段落があるとしましょう。最後の段落だけを表示するにはどうすればよいですか?

答え1

awk段落モードを使用できます(RS空の場合、段落は一連の空白行に分割され、先行空白行と末尾空白行は無視されます)。

awk -v RS= 'END{print}' < file.txt

入力ファイルに段落が含まれていない場合(空白または空白行のみが含まれている場合)、空白行が印刷されます。これを防ぐには、上記の内容を次のように変更できます。

awk -v RS= 'END{if (NR) print}' < file.txt

NR数量です記録(この場合)ファイルから)。

答え2

段落が空行で区切られていると仮定すると、次のことが機能します(3つの「テスト」インスタンスをファイル名に置き換えます)。

tail -n `expr $(wc -l test | cut -f1 -d' ') - \
              $(grep -ERn '^$' test | tail -n1 | grep -o '[0-9]\+')` test

より簡単な解決策があると確信しています。ここでは、最後の空行を探し、grep -ERn '^$' test | tail -n1最初の空行の前のすべてを削除します。tail

答え3

入力に後ろに空白行がないと仮定すると、次のように実行できます。

sed 'H;/^$/h;$!d;x' infile

これにより、予約されたスペースが各段落の内容で上書きされ、スワップバッファの最後の行を除くパターンスペースが削除されます。出力の先頭に空白行が表示されますが、これは簡単に削除できます。練習用に残しておきます。

答え4

洗練されたキャプテンキャップ答えを得るには、より簡単な作業を実行できますawk

tail -n$(tac myFile.txt | awk '/^$/{print NR-1; exit}') myFile.txt

段落が空行で区切られているか、空白のみが含まれているとします。

tac編集:実際に機能するには、との間に混乱がrevあります。tac

編集:ファイルに空白行が続くのが心配な場合は、次の方法で問題を解決できますawk

tail -n $(tac myFile.txt | \
          awk 'BEGIN{i=1} /^$/{if (NR == i) {i++} else {print NR-1; exit}}') \
     myFile.txt

テストしてみた結果、期待通りに動作するようです!

関連情報