次のソースファイルがあります。
server1 Mitigated Vulnerable Mitigated
server2 Vulnerable Vulnerable Mitigated
server3 Mitigated Vulnerable Vulnerable
server4 Mitigated Vulnerable Mitigated
server5 Mitigated Vulnerable Mitigated
server6 Vulnerable Vulnerable Vulnerable
各行の2番目と4番目の要素を比較し、次のロジックを使用して5番目の要素を追加したいと思います。
そのうちの1つ(2番目または4番目の要素)が脆弱性を示す場合、5番目の要素は脆弱性を示します(そして、次のように同じ行に印刷したいと思います:
server2 Vulnerable Vulnerable Mitigated Vulnerable
2つ(2番目と4番目)のみを緩和すると、5番目の要素が緩和されます。
3番目の要素は無視しても構いません。
答え1
使用awk
:
awk '$2 == "Vulnerable" || $4 == "Vulnerable" { $5 = "Vulnerable" } { print }' file
サンプルデータにこれを使用した結果:
server1 Mitigated Vulnerable Mitigated
server2 Vulnerable Vulnerable Mitigated Vulnerable
server3 Mitigated Vulnerable Vulnerable Vulnerable
server4 Mitigated Vulnerable Mitigated
server5 Mitigated Vulnerable Mitigated
server6 Vulnerable Vulnerable Vulnerable Vulnerable
コードawk
は2番目と4番目のフィールドを調べ、そのフィールドの1つが文字列の場合は5番目のフィールドをVulnerable
取得します。次に、すべてのフィールド(すべての入力行)を印刷します。
答え2
Awk
解決策:
これら2つの条件の場合:
- そのうちの1つ(2番目または4番目の要素)が次のように言うと、5番目の
vulnerable
要素は次のようになります。Vulnerable
- 2つ(2番目と4番目)がある場合、5番目の
mitigated
要素は次のようになります。Mitigated
awk '$2$4 ~ /[vV]ulnerable/{ $5="Vulnerable" }
$2 ~ /[mM]itigated/ && $2 == $4{ $5="Mitigated" }1' file
出力:
server1 Mitigated Vulnerable Mitigated Mitigated
server2 Vulnerable Vulnerable Mitigated Vulnerable
server3 Mitigated Vulnerable Vulnerable Vulnerable
server4 Mitigated Vulnerable Mitigated Mitigated
server5 Mitigated Vulnerable Mitigated Mitigated
server6 Vulnerable Vulnerable Vulnerable Vulnerable