awk - 使用 awk 在列中打印部分匹配
问题描述
我正在尝试使用 awk 打印与存储在变量 $file_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"
PS 我知道列 $4 不需要指定为“EX”,无论如何只出现在 $4 中。但是,这是一个要求。
任何帮助将不胜感激!
解决方案
您可以将其awk
用于第 4 列中的忽略大小写匹配:
s='[Ee][Xx]' # or read from user
awk -v re="$s" 'tolower($4) ~ tolower(re)' file
TCP 120 1000 EXT_SERVER
TCP 33 230 EXT_SERVER
$4
是第 4 列并且/[Ee][Xx]/
匹配第 4 列中的ex
orEX
或Ex
or eX
。
推荐阅读
- python - 如何使用 args 将数组传递给 scipy.integrate.solve_ivp?
- ios - 在标签的右上角添加点
- sql - 如何在 dplyr::filter 中使用子查询
- amazon-web-services - 使用 SDK 检查 Cognito 域前缀的可用性
- postgresql - 在 postgres 中安装扩展
- python-import - 原子python-import-magic
- azure-data-factory - Azure 映射数据流中的参数化负载
- python - Plotly:如何使用 go.Bar 为组指定颜色?
- django - 电子表格,如 django 中的 UI 和功能
- php - Laravel 7 雄辩的关系不起作用