【问题标题】:Read column from file and run commands with the values从文件中读取列并使用这些值运行命令
【发布时间】:2015-03-11 12:24:25
【问题描述】:

我有这样的文本文件:

313 "88.68.245.12"
189 "87.245.108.11"
173 "84.134.230.11"
171 "87.143.88.4"
158 "77.64.132.10"
....

我只想 grep 前 10 行中的 IP,在 IP 地址上运行 whois,然后从该输出中,我想 grep netname 所在的行。

我怎样才能做到这一点?

【问题讨论】:

  • 这是很基本的,这里已经被反复问过了。你尝试了什么?
  • 哇,我不认为这是基本的..我现在正在尝试使用 awk 和 grep。
  • awk -F'"' '{print $2}' file | xargs whois | grep 'netname'
  • Avinash,你的命令中的输入文本文件在哪里?
  • @SirBenBenji,您可以使用while read 循环并跟踪您目前阅读的行数。

标签: linux bash awk grep


【解决方案1】:

只需使用while - read 循环遍历文件:

while IFS='"' read -r a ip c
do
    echo "ip: $ip"
    whois "$ip" | grep netname
done < <(head -10 file)

这是给IFS='"',因此字段分隔符是双引号"。这样,双引号内的值将存储在$ip中。

然后,我们打印 ip 并执行 whois | grep 的事情。

最后,我们向循环提供head -10 file,这样我们就只读取了前 10 行。

【讨论】:

  • 顺便说一句:我正在尝试在您的脚本中加入排序功能,但这不起作用done &lt; &lt;(head -10 file | sort)
  • 你想sort做什么?初始文件还是输出?如果是输出,只需在我发布的整个块 之后通过管道传输所有内容。
  • TY 用于跟进。尝试对大约 1000 行的文件进行排序,然后在输出的前十行运行 whois 块。
  • @SirBenBenji 这是一个完全不同的问题,为此,您应该指出所需的输出等。您最好使用 [sort] 和 [bash] 以及 man sort 检查一些问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
相关资源
最近更新 更多