【发布时间】:2015-02-13 12:35:59
【问题描述】:
我正在尝试运行这样的 sh 脚本来收集有关 IP 地址的地理信息。 inputfile.txt 只是一个包含 IP 地址的单列文件。
这是我的输入文件的示例:
213.100.122.171
213.100.126.188
213.100.129.186
213.100.18.247
213.100.23.238
213.100.26.151
这是我正在使用的代码:
#!/usr/bin/env bash
output=outputfile.csv
for i in $( cat "inputfile.txt");
do echo -e "$i,"$( geoiplookup -f /usr/share/GeoIP/GeoLiteCity.dat $i | cut -d' ' -f6,8-9)"" >> $output;
done
当我运行这个文件时,结果是这样的
213.100.126.188
,LV, N/A, N/A,
213.100.129.186
,SE, N/A, N/A,
213.100.18.247
,LV, N/A, N/A,
213.100.23.238
,LV, N/A, N/A
我希望他们在各自的行中,比如
213.100.126.188,LV, N/A, N/A,
213.100.129.186,SE, N/A, N/A,
213.100.18.247,LV, N/A, N/A,
213.100.23.238,LV, N/A, N/A,
我的脚本哪里出错了?
【问题讨论】:
-
你在很多地方都错了:
for i in $(cat "inputfile.txt"); do错了。inputfile.txt的内容是什么?顺便说一句,去向给你看这个的人抱怨。真的去做。你有$(geoiplookup ...)未引用。这很糟糕(取决于路径名扩展)。您在那里也使用了未引用的变量$i。您正在为每个 ip 打开和关闭文件outputfile.csv,这只是无用的资源消耗。将重定向放在循环的末尾。当然,这些都不能解决你的问题!