linux - 从 .csv 日志文件中的文本文件中搜索 IP,如果找到,则在其旁边添加新列
问题描述
我需要一个从 .csv 日志文件中的文本文件中查找 IP 地址的 shell 脚本,如果找到结果,它将在 csv 文件的右侧创建一个新列,将其称为“可疑”
到目前为止,我想出了这个命令:
cat *.csv | grep --color=always -z -w -f 'list.txt' | sed 's/^/SUSPICIOUS, /' > *.csv
这有两个问题:
它在每一行上创建可疑列
它在左侧而不是右侧创建新列
(如果我使用正则 grep 表达式,它只会保存包含这些 IP 地址的结果,我需要每一行日志)
解决方案
这似乎更容易做到awk
。将文本文件加载到关联数组的键中。然后读取 CSV 文件,并测试 IP 字段是否包含在数组中。
awk -i inplace -F, -v OFS=, '
NR==FNR { a[$0]++; next } # Put lines from list.txt into array
a[$8] { print $0 "SUSPICIOUS" } # Test if IP in current row is in array
{ print }' inplace=0 list.txt inplace=1 *.csv # Otherwise print row normally
这使用了 GNU awk 的就地扩展,因此它可以将结果写回输入文件。
推荐阅读
- resharper - 搜索上传会发现 reload.png
- amazon-web-services - 我在 aws 控制台(cloudwatch 代理)上找不到 cwagent 指标
- ruby-on-rails - Ruby on Rails:如何测试控制器?
- graphql - 空手道如何让 websocket 保持活力
- java - 如何从 citrus 测试类调用 citrus bean 配置类中的任何变量
- javascript - 是否可以通过css自动聚焦在div上?
- phpmyadmin - 如何将 vb.net 2012 连接到其他计算机上的数据库
- javascript - MongoDB如果字段不存在插入
- excel - 我在 Userform2 中创建了一个“返回”按钮来显示 Userform1,但出现错误:运行时错误 400 表单已经显示无法模态
- java - 更新recyclerview数据