使用awk在列中打印部分匹配
我正在尝试使用awk打印与变量$file\u log中存储的文件中特定数据列($4)中的模式匹配的任何匹配项。这场比赛也必须是局部的,而且是有说服力的。这是文件数据使用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
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
或使用gawkawk-v IGNORECASE=1-v re=“$s”$4~re”file
。我想知道OP是否真的需要一个regexp比较——我们无法从“模式”中分辨出来……请阅读以理解您的问题中的问题,然后用regexp或string替换单词“pattern”,在您的问题中出现的任何地方都替换为full或partial,并在“pattern”中包含regexp元字符要进行匹配,以便我们可以看到您希望如何处理(例如,是否应该在数据中的src\u ip\u选项中matchex
fromext
和er
fromserver
)