以下のようにテキストファイルにデータがあります。
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 > 2
6列と7列の値に0を追加して、%
90をテストする前に強制的に数値に変換します(したがってデータの符号が削除されます)。
答え2
perl -lane 'print if $. <= 2 || grep { $_ > 90. } @F[5,6]' input-data.file
行はスペースで区切られ、フィールドは@F
ゼロから始まるインデックス配列に格納されます。ヘッダー(行1、2)は無条件に印刷され、残りはフィールド6および/または7(少なくとも90%を含む)を探すフィルタに基づいて選択されます。