我正在尝试编写bash脚本,以简化IP信息收集过程。现在,我已经做了一个脚本,它运行在多个文件中的IP地址的一列中,查找geo和主机信息并将其存储到一个新文件中。
更好的是,还有一个脚本,它可以从具有3列(日期、时间、ip地址)的文件中生成结果。分隔符是空间。我试过了,但是没有。我是个十足的新手
这是我的原稿:
#!/usr/bin/env bash
find *.txt -print0 | while read -d $'\0' file;
do
for i in $( cat "$file")
do echo -e "$i,"$( geoiplookup -f "/usr/share/GeoIP/GeoLiteCity.dat" $i | cut -d' ' -f6,8-9)" "$(nslookup $i | grep name | awk '{print $4}')"" >> "res/res-"$file".txt";
done
done输入文件示例
2014-03-06 12:13:27 213.102.145.172
2014-03-06 12:18:24 83.177.253.118
2014-03-25 15:42:01 213.102.155.173
2014-03-25 15:55:47 213.101.185.223
2014-03-26 15:21:43 90.130.182.2你能帮我一下吗?
发布于 2015-02-16 12:05:33
目前的代码试图做什么还不完全清楚,但是这里有一个希望有用的重构,它至少可以作为一个起点。
#!/usr/bin/env bash
find *.txt -print0 | while read -d $'\0' file;
do
while read date time ip; do
geo=$(geoiplookup -f "/usr/share/GeoIP/GeoLiteCity.dat" "$ip" |
cut -d' ' -f6,8-9)
addr=$(nslookup "$ip" | awk '/name/ {print $4}')
#addr=$(dig +short -x "$ip")
echo "$ip $geo $addr"
done <"$file" >"res/res-$file.txt"
done我的nslookup副本没有输出四个字段,但我假设脚本的一部分是正确的。dig +short的输出更适合于机器处理,因此可能会切换到机器处理。也许geoiplookup还提供了一个输出机器可读的结果的选项,或者可能有一个替代的接口。
我认为您的脚本输出部分逗号分隔、部分空格分隔的结果是错误的,所以我也改变了这一点。如果您想让其他工具能够读取这个输出,也许您应该使用CSV或JSON。
尝试生成一个名为res/res-$file.txt的文件只有在file不在任何子目录时才能工作,所以我猜您会想用basename来修复这个问题;或者也许find循环应该替换为一个简单的for file in *.txt。
https://stackoverflow.com/questions/28540475
复制相似问题