使用awk在列中打印部分匹配

使用awk在列中打印部分匹配,awk,Awk,我正在尝试使用awk打印与变量$file\u log中存储的文件中特定数据列($4)中的模式匹配的任何匹配项。这场比赛也必须是局部的,而且是有说服力的。这是文件数据 Protocol Packets Bytes SourceIP TCP 120 1000 EXT_SERVER TCP 33 230 EXT_SERVER UDP 260 157 100012_S

我正在尝试使用awk打印与变量$file\u log中存储的文件中特定数据列($4)中的模式匹配的任何匹配项。这场比赛也必须是局部的,而且是有说服力的。这是文件数据

Protocol    Packets    Bytes    SourceIP
TCP         120        1000     EXT_SERVER
TCP         33         230      EXT_SERVER
UDP         260        157      100012_SERVER
ICMP        340        89       100012_SERVER
因此,如果用户在下面的代码中提供“ex”的输入,那么输出将在$4列下显示带有EXT_SERVER的所有行

read -p 'Type the Source IP code you wish to search for: ' src_ip_choice
这是我到目前为止所拥有的,但是没有输出,即使有与我输入的模式相匹配的数据

read -p 'Type the Source IP code you wish to search for: ' src_ip_choice
if grep -i -q "$src_ip_choice" "$specified_log"; then
    awk -F',' '$4~/$src_ip_choice/' $specified_log
else
    echo "The Source IP code you entered cannot be found within $specified_log"
另外,我知道$4列不需要指定为“EX”,但它只出现在$4中。然而,这是一项要求


任何帮助都将不胜感激

您可以使用此
awk
来忽略第4列中的大小写匹配:

s='[Ee][Xx]'#或从用户处读取
awk-v re=“$s””tolower($4)~tolower(re)”文件
TCP 120 1000外部服务器
TCP 33 230外部服务器

$4
是第四列,
/[Ee][Xx]/
匹配第四列中的
ex
ex
ex

Hi@anubhava是否有办法根据存储在“src\u ip\u选项”变量中的用户提供的模式进行awk搜索?是的,可以这样做。请参阅更新的答案。感谢您的帮助@anubhava!!如果我使用一个包含用户输入的变量而不是“[Ee][Xx]”,如何使其不区分大小写?是的,当然可以这样做:
awk-v re=“$s”'tolower($4)~tolower(re)'file
或使用gawk
awk-v IGNORECASE=1-v re=“$s”$4~re”file
。我想知道OP是否真的需要一个regexp比较——我们无法从“模式”中分辨出来……请阅读以理解您的问题中的问题,然后用regexp或string替换单词“pattern”,在您的问题中出现的任何地方都替换为full或partial,并在“pattern”中包含regexp元字符要进行匹配,以便我们可以看到您希望如何处理(例如,是否应该在数据中的
src\u ip\u选项中
match
ex
from
ext
er
from
server