Ваше использование «слова» является предложением (мне ), что вы могли бы использовать конструкции границы слова grep:
LIST="1,21,3,4"
SOURCE="2"
if echo "$LIST" | grep -q "\\<$SOURCE\\>"; then
echo "matched";
else
echo "no match";
fi
#!/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 введите дес ip :.30 введите порт src :34
TCP.10 29.30 300
Не проверено:
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 }
, если вы действительно хотите напечатать только это подмножество полей, а не всю строку.