偶数和奇数行基于赋值变量

时间:2016-09-19 05:26:56

标签: shell

我正在尝试从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

但是我无法读取值并将其存储在变量中。

任何建议都会有很大帮助。

3 个答案:

答案 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中使用它时双引号。否则所有行都将以单行显示。