linux - xargs 与 ipinfo.io 形成一行以获取信息

标签 linux api geolocation xargs

http://ipinfo.io特定信息标签的入门示例如下:

cat ips.txt | xargs -I% curl -s http://ipinfo.io/%/org | paste -d"," ips.txt -

返回:

8.8.8.8,AS15169 Google Inc.
8.8.4.4,AS15169 Google Inc.
1.2.3.4,AS15169 Google Inc.

我想要多条信息,所以我将示例更改为:

cat ips.txt | xargs -I% curl -s http://ipinfo.io/%/city http://ipinfo.io/%/region | paste -d"," ips.txt - > ip_info.txt

返回:

156.221.17.167,Punjab
,Dol pri Ljubljani

我如何格式化我的请求,以适应同一行中与 IP 相关的所有信息,并用逗号“,”分隔,如下所示:

156.221.17.167,Punjab,Dol pri Ljubljani

最佳答案

如果您需要多条信息,最好在一个请求中获取所有信息,然后使用 jq 提取您想要的信息。这是 IP 的完整 JSON 输出(有关更多示例,请参见 http://ipinfo.io/developers):

$ curl ipinfo.io/8.8.8.8
{
  "ip": "8.8.8.8",
  "hostname": "google-public-dns-a.google.com",
  "city": "Mountain View",
  "region": "California",
  "country": "US",
  "loc": "37.3860,-122.0838",
  "org": "AS15169 Google Inc.",
  "postal": "94035"
}

然后用jq把IP、city和country拉出来成CSV:

$ curl -s ipinfo.io/8.8.8.8 | jq -r '[.ip, .city, .country] | @csv'
"8.8.8.8","Mountain View","US"

如果我们有一个包含一堆 IP 的文件,我们可以这样做:

$ cat ips.txt | xargs -I% curl -s http://ipinfo.io/%/json | jq -r '[.ip, .city, .country] | @csv'

关于linux - xargs 与 ipinfo.io 形成一行以获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41597393/

相关文章:

Javascript:如何以编程方式在 X 秒后终止警报

linux - WordPress 用户表迁移损坏?

mysql - 配置单元使用 mysql 元存储

linux - 程序显示控制台输出,即使 stdout 和 stderr 被重定向

python - DRF- Django Rest Framework re_path 查询参数 - "Method\"GET\"not allowed."

google-chrome - 允许对我之前拒绝的网站使用地理定位

linux - 使用 gnuplot 进行绘图的 Bash 脚本

api - Spring RestTemplate 与 Jersey Rest Client 与 RestEasy 客户端

javascript - 如何在客户端 Javascript 中隐藏 API key

r - 替换R中的特殊字符