我正在尝试从txt文件中读取数据。以下是txt文件的内容。
http://google.com
google is working
http://yahoo.com
Yahoo is working
我正在尝试将奇数行分配给变量A甚至变量B.这样我就可以运行以下命令。
curl -s http://google.com | grep -Po 'google is working'
curl -s http://yahoo.com | grep -Po 'Yahoo is working'
我试图使用变量完成它,以便在curl中自动传递奇数行,甚至在grep中
curl -s $A | grep -Po $B
但是我无法读取值并将其存储在变量中。
任何建议都会有很大帮助。
答案 0 :(得分:2)
考虑:
awk 'NR%2{url=$0;next} {system("curl -s \""url"\" | grep -Po \""$0"\"");}' file
工作原理:
NR%2{url=$0;next}
如果我们处于奇数行,请将其值保存到变量url
并跳至next
行。
这会将整行保存为URL。这意味着您必须小心您的行实际上是正确的URL。尾随空格不应该在行上,除非它们实际上是URL的一部分。
system("curl -s \""url"\" | grep -Po \""$0"\"")
运行您想要的shell命令
我对测试文件进行了两处更改:(1)删除了尾随空格,(2)更改了偶数行以匹配可以找到的文本:
$ cat file
http://google.com
TITLE.*TITLE
http://yahoo.com
TITLE.*TITLE
使用此文件,上面的命令产生输出:
$ awk 'NR%2{url=$0;next} {system("curl -s \""url"\" | grep -Po \""$0"\"");}' file
TITLE>301 Moved</TITLE
TITLE>Document Has Moved</TITLE
答案 1 :(得分:2)
下面是一个简单的while loop
,它可以为您提供所需的解决方案。
while read -r odd_line
do
echo "Odd line" $odd_line
read -r even_line
echo "Even line" $even_line
curl -s "$odd_line" | grep -Po "even_line"
done < temp.txt
工作原理
temp.txt
是包含您数据的文件。这个while循环一次读取temp.txt
一行。正如预期的那样,第一行将是奇数odd_line
变量将保持奇数行。在循环内部再次调用read将读取偶数行。所以even_line
变量将包含偶数行。一旦定义了两个变量,就可以将它们传递给任何命令
答案 2 :(得分:0)
cat sample
this is odd
this is even
this is odd
this is even
这将打印奇数行
sed -n 1~2p sample
this is odd
this is odd
这将打印偶数行
sed -n 2~2p sample
this is even
this is even
使用命令替换将sed
输出存储在任何变量中。
A=$(sed -n 2~2p sample)
awk
版本:检查行/记录号是否可以被2整除。
awk ' NR % 2 != 0 { print; }' sample
this is odd
this is odd
awk ' NR % 2 == 0 { print; }' sample
this is even
this is even
注意:要保持变量的完整性,请在curl
中使用它时双引号。否则所有行都将以单行显示。