迭代变量中的X行(Bash)

时间:2015-09-05 19:16:01

标签: bash loops curl printing lines

我正在尝试编写一个简单的脚本来打印网页源代码的前5行,然后是页面加载所需的请求时间。目前,我一直在尝试以下方法:

#!/bin/bash
# Enter a website, get data

output=$(curl $1 -s -w "%{time_connect}\n" | (head -n5; tail -n1))
echo "$output"

但是,在某些页面上,“tail”实际上并没有打印,这应该是请求的时间,我不知道为什么。

我发现我也可以使用while循环遍历行并打印整个内容,但有没有办法让我只回显一个变量的前几行然后再调整它的最后几行变量,所以我可以在请求时间之前加上标题(例如:请求时间:0.489)

我希望能够将其格式化为:

echo "HTML: $output\n" 
echo "Request Time: $requestTime"

谢谢!对不起,如果这看起来很简单,我对这种语言真的很新:)。对我来说,主要的问题是从同一个请求获取所有数据 - 做两个单独的curl请求将非常简单。

2 个答案:

答案 0 :(得分:1)

head可能会读取超过5行输入,以便确定需要输出的内容。这意味着您要传递给tail的行可能已被使用。使用单个进程(在这种情况下为awk)来处理所有输出更安全。

output=$(curl "$1" -s -w "%{time_connect}\n" | awk 'NR<=5 {print} END {print})

答案 1 :(得分:0)

马车回来了我。试试这个:

echo "HTML: "
retn=$'\r'

i=0
while read item
do
    item="${item/$retn/}"    # Strip out the carriage-return

    if (( i < 5 )); then     # Only display the first 5 lines
        echo "$item"
    fi

    (( i++ ))
    requestTime="$item"    # Grab the last line

done < <(curl $1 -s -w "%{time_connect}\n")

requestTime="${requestTime##*\>}"    # Sanitise the last line

echo "Request Time: $requestTime"