ファイルの行の評価

ファイルの行の評価

次のソースファイルがあります。

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

関連情報