特定の条件を満たす2つのパターンの間に線を印刷する方法は?
たとえば、入力ファイルの場合部分的に次のコンテンツが含まれています。
Time %MEM %CPU %SWAP
00:05:02 7.3 8.4 3.5
00:10:02 10 4.3 4.5
00:15:02 8.5 4.4 6.7
00:20:02 25.3 35.8 7.3
00:25:02 74.6 28.4 7.3
00:30:02 67.2 88.3 7.3
00:35:02 35.4 87.4 7.3
00:40:02 27.3 92.8 7.3
00:45:02 45.3 83.2 10.5
00:50:02 30 65.7 10.5
01:00:02 92.3 66.4 10.5
01:05:02 13.1 69.4 13.5
01:10:02 45.2 77.4 13.5
01:15:02 48.7 78.8 13.5
01:20:02 49.1 80.5 13.5
01:25:02 72 83.9 13.5
END
初めてスワップ値を印刷し、7より大きいすべてのスワップ値を印刷したいと思います。だから私の出力は次のようになります
00:20:02 7.3
00:45:02 10.5
01:05:02 13.5
私は試した:
awk '/%SWAP/{flag=1;next}/End/{flag=0}flag' myFile
すべての行を印刷します。私も次のことを試しました。
awk '/%SWAP/ {flag=1;next}
/End/{flag=0}
{if ($10 > max) {max=$10; print $1 " " $2 " " $4}}' myFile
しかし、これは私にファイルの前の部分の出力を与えます$4
。
誰にも解決策はありますか?どんな説明でもよろしくお願いします。
答え1
あなたは言うことができます:
$ awk '($4>7 && $4!=swap) {swap=$4; print $1, $4}' file
00:20:02 7.3
00:45:02 10.5
01:05:02 13.5
つまり、SWAPより大きい最後の値を変数7
に保存し、その値を比較し続けます。swap
-v OFS="\t"
出力フィールド区切り文字をtab:またはに設定すると、より良い出力が得られますBEGIN {OFS="\t"}
。またはにパイプすることができますcolumn -t
。