awk를 사용하여 세 가지 변수가 모두 참인지 인쇄하세요.

awk를 사용하여 세 가지 변수가 모두 참인지 인쇄하세요.

이 변수 중 하나라도 해당되면 코드를 인쇄하고 싶습니다. 이것은 내 실제 코드가 아닙니다. 이것은 단지 예일 뿐입니다.

read -p "enter protocol: " protocol
read -p "enter src ip: " srcip
read -p "enter dst ip: " dstip
read -p "enter src port: " srcport 
read -p "enter dst port: " dstport 

등.

awk -F"," -v pro="$protocol" -v sip="$srcip" -v dip="$dstip" -v sport="$srcport"  -v dport="$dstport" '{ if(pro == "tcp" && sip == "10" && dip == "30" && sport == "4" && dport == "1") 
print $1,$2,$3,$4,$5,$6,$7}' test.txt > test2.txt

좀 더 명확하게 하기 위해 여기서는 다른 방식으로 작성하겠습니다.

PROTOCOL,SRC IP,SRC PORT,DEST IP,DEST port
tcp      .10     29      .30     300
udp      .34     545     .94    90
tcp      .23     233     .23    42 

사용자 입력과 일치하도록 이 변수 ​​중 세 개가 필요합니다. 행을 인쇄합니다.

아래 코드를 시도했지만 오류가 발생합니다.

awk -F","  -v pro="$protocol" -v sip="$srcip" -v dip="$dstip" -v sport="$srcport"  -v dport="$dstport" 'BEGIN {if ($3 ~ pro) count++; if ($4 ~ sip) count++; if ($5 == sport) count++; if ($6 ~ dip) count++; if ($7 == dport) count++; count>=3; { print  $3,$4,$5,$6,$7 }' test.txt > test2.txt
error: ^ syntax error 
      ^ unexpected newline or end of string

답변1

테스트되지 않음:

awk -F',' -v pro="$protocol" -v sip="$srcip" -v dip="$dstip" -v sport="$srcport" -v dport="$dstport" '
    {
        c = 0
        c += (pro == "tcp")
        c += (sip == "10")
        c += (dip == "30")
        c += (sport == "4")
        c += (dport == "1")
    }
    c > 2
' test.txt

c > 2 { print $1,$2,$3,$4,$5,$6,$7 }전체 행이 아닌 필드의 하위 집합만 인쇄하려는 경우 이 작업을 수행하십시오.

답변2

#!/bin/bash
read -p "enter the src ip:" srcip
read -p "enter the des ip:"  desip
read -p "enter the src port:" srcport


awk -v srcip="$srcip" -v desip="$desip" -v srcport="$srcport" '($2 == srcip||$4 == desip || $5 == srcport){print $0}' filename

테스트를 거쳐 잘 작동함

산출

src ip:.10을 입력하세요. des ip:.30을 입력하세요. src 포트:34를 입력하세요.

TCP .10 29 .30 300

관련 정보