파일의 라인 평가

파일의 라인 평가

다음과 같은 소스 파일이 있습니다.

server1 Mitigated Vulnerable Mitigated
server2 Vulnerable Vulnerable Mitigated
server3 Mitigated Vulnerable Vulnerable
server4 Mitigated Vulnerable Mitigated
server5 Mitigated Vulnerable Mitigated
server6 Vulnerable Vulnerable Vulnerable

각 행의 두 번째 요소와 네 번째 요소를 비교하고 다음 논리를 사용하여 다섯 번째 요소를 추가하고 싶습니다.

그 중 하나(두 번째 또는 네 번째 요소)가 취약함을 나타내는 경우 다섯 번째 요소는 취약함을 나타냅니다(그리고 다음과 같이 같은 줄에 인쇄하고 싶습니다:

server2 Vulnerable Vulnerable Mitigated Vulnerable

2개(2번째와 4번째)만 완화되면 다섯 번째 요소가 완화됩니다.

세 번째 요소는 무시해도 됩니다.

답변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는 두 번째 및 네 번째 필드를 살펴보고 해당 필드 중 하나가 문자열인 경우 Vulnerable다섯 번째 필드를 가져옵니다. 그런 다음 모든 필드(모든 입력 줄)를 인쇄합니다.

답변2

Awk해결책:

이 두 가지 조건의 경우:

  • 그 중 하나(두 번째 또는 네 번째 요소)가 다음과 같이 말하면 vulnerable다섯 번째 요소는 다음과 같습니다.Vulnerable
  • 두 개(두 번째와 네 번째)만 있는 경우 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

관련 정보