cronジョブを実行していますiostat -d 1 2
。空でない行の最後のセット各グループの長さがわからない場合は、標準入力から標準出力へ?
不良/動作しないソリューション:
tail
なぜなら、まだ最後のグループの行数を数える必要があるからです。iostat -d 1 2 | tail -$(echo "$(iostat -d 1 2 | wc -l) / 2" | bc)
同じコレクションサイズによって異なります。split
これは/csplit
ファイルとして出力し、データの無駄な部分を保持するためです。iostat -d 1 2 | sed '1,/^$/d' | sed '1,/^$/d'
空でない3行目のセットを取得し、末尾の改行も含めるため、この特別な場合にのみ機能します。iostat -d 1 2 | tac | sed '1,/^$/d' | sed '/^$/q'
やや良い方法は、最初のセットを裏返して印刷することです。ただし、iostat
最後の出力は空白行なので、最初に削除してから、逆方向出力から次の空白行まで印刷します。他のコマンドは最後に複数行を出力する可能性があるため、これは一般的な回避策ではありません。元の順序を維持するには、逆の順に進んでください。grep -P
\Z
EOFではなくEOLのみを検出しているようです。
答え1
使用できる段落モードawk
です(RSが空の文字列の場合)。これにより、各「セット」がレコードになり、最後のレコードを簡単に印刷できます。
iostat -d 1 2 | awk -vRS= 'END{print}'
答え2
perl -00
一度に1つの段落を読むのに最適な方法なので、最後の段落は次のようになります。
perl -00 -ne '$para = $_; END {print $para}'
答え3
そしてsed
:
sed '/^$/{$!{N;/\n$/D;s/.//;$!h;$p;d};};//!{H;1h;$!d};$x' infile
これにより、前後の空白行なしで空でない最後の行セットが印刷されます。
例えば
iostat -d 1 2 | sed '/^$/{ # if the line is empty
$!{ # and if it's not the last line
N # then pull in the next line
/\n$/D # if also empty, delete up to \n, restart cycle
s/.// # otherwise delete leading \newline
$!h # copy over hold space if not last line
$p # or print pattern space if last line
d # then delete pattern space
}
}
//!{ # if the line isn't empty
H # append it to hold space
1h # if it's the first line, overwrite hold space
$!d # if it's not the last line, delete it
}
$x # on the last line, exchange buffers
'