列6または7が90%を超える場合は、一致する行を印刷します。

列6または7が90%を超える場合は、一致する行を印刷します。

以下のようにテキストファイルにデータがあります。

server         volume               available total   used  percent-used percent-vol-space
--------------- -------------------- --------- ------- ----- ------------ ----------------------
TEMPSERVER      TEMP_root       972.4MB     972.8MB 388KB 5%           5%
TEMPSERVER      TEMPVOL01           2.59TB      5.13TB  2.55TB 54%         10%
TEMPSERVER      TEMPVOL02           2.26TB      4.10TB  1.53TB 50%         10%
TEMPSERVER      TEMPVOL02_Clone     2.26TB      4.10TB 1.57TB 50% 10%
TEMPSERVER      TEMPVOL03           1.79TB      3.88TB  2.10TB 63%         20%
TEMPSERVER      TEMPVOL03_Clone     2.26TB      4.10TB 1.79TB 50% 10%
TEMPSERVER      TEMPVOL04           3.32TB      4.30TB  807.3GB 30%        10%
22 entries were displayed.

これで、列6または7の値が90%を超える場合は、すべての行を印刷したいと思います。どうすればいいですか?

答え1

awk 'NR > 2 && (0+$6 > 90 || 0+$7 > 90)' <file

これはデータを1行ずつ読み取り、1行のフィールド6または7の数字が90より大きい場合は常に印刷します。最初の2つのヘッダー行をスキップし、NR > 26列と7列の値に0を追加して、%90をテストする前に強制的に数値に変換します(したがってデータの符号が削除されます)。

答え2

perl -lane 'print if $. <= 2 || grep { $_ > 90. } @F[5,6]' input-data.file

行はスペースで区切られ、フィールドは@Fゼロから始まるインデックス配列に格納されます。ヘッダー(行1、2)は無条件に印刷され、残りはフィールド6および/または7(少なくとも90%を含む)を探すフィルタに基づいて選択されます。

関連情報