linux - 从 .csv 日志文件中的文本文件中搜索 IP,如果找到,则在其旁边添加新列

标签 linux bash shell csv logging

我需要一个 shell 脚本来从 .csv 日志文件内的文本文件中查找 IP 地址,如果找到结果,它将在 csv 文件的右侧创建一个新列,并将其称为“可疑”

到目前为止,我想出了这个命令:

cat *.csv | grep --color=always -z -w -f 'list.txt' | sed 's/^/SUSPICIOUS, /' > *.csv

这有两个问题:

  1. 它在每一行上创建可疑列

  2. 它在左侧而不是右侧创建新列

(如果我使用正则 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 的就地扩展,因此它可以将结果写回输入文件。

关于linux - 从 .csv 日志文件中的文本文件中搜索 IP,如果找到,则在其旁边添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51776445/

相关文章:

regex - 找到一个模式并替换整行&找到一个模式并插入到后面

linux - 通过变量删除unix文件中的一系列行

bash - 索引大型排序哈希文件的最快方法

bash 从右到左连接字符串

linux - 如何将参数从 bash 文件传递​​给 awk 文件

linux - 编写 shell 脚本将目录中最旧的文件移动到新目录。?

java - 无法将服务代理 (sun.jvm.hotspot.HSDB) 连接到在 Windows 7(32 位)上运行的 jvm

c - 尝试读取 json 文件时出现段错误

bash - diff 的错误退出值是多少?

mysql - 如何将变量从 shell 脚本传递到 mysql 脚本