迭代变量中的 X 行 (Bash)
Iterate Over X Lines in Variable (Bash)
我正在尝试编写一个简单的脚本来打印网页源代码的前 5 行,然后是加载页面所花费的请求时间。目前,我一直在尝试以下操作:
#!/bin/bash
# Enter a website, get data
output=$(curl -s -w "%{time_connect}\n" | (head -n5; tail -n1))
echo "$output"
然而,在某些页面上,"tail"实际上并没有打印,这应该是请求的时间,我不知道为什么。
我发现我也可以使用 while 循环遍历行并打印整个内容,但是有没有办法让我只回显变量的前几行,然后回显变量的最后一行同一个变量,所以我可以在请求时间之前加上一个标题(例如:请求时间:0.489)?
我希望能够将其格式化为:
echo "HTML: $output\n"
echo "Request Time: $requestTime"
谢谢!对不起,如果这看起来很简单,我真的是这种语言的新手:)。对我来说,主要问题是从同一个请求中获取所有这些数据——执行两个单独的 curl 请求会非常简单。
马车returns把我扔了。试试这个:
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 -s -w "%{time_connect}\n")
requestTime="${requestTime##*\>}" # Sanitise the last line
echo "Request Time: $requestTime"
head
可能会读取超过 5 行的输入,以便确定它需要输出什么。这意味着您打算传递给 tail
的行可能已被使用。使用单个进程(awk
,在本例中)处理所有输出更安全。
output=$(curl "" -s -w "%{time_connect}\n" | awk 'NR<=5 {print} END {print})
我正在尝试编写一个简单的脚本来打印网页源代码的前 5 行,然后是加载页面所花费的请求时间。目前,我一直在尝试以下操作:
#!/bin/bash # Enter a website, get data output=$(curl -s -w "%{time_connect}\n" | (head -n5; tail -n1)) echo "$output"
然而,在某些页面上,"tail"实际上并没有打印,这应该是请求的时间,我不知道为什么。
我发现我也可以使用 while 循环遍历行并打印整个内容,但是有没有办法让我只回显变量的前几行,然后回显变量的最后一行同一个变量,所以我可以在请求时间之前加上一个标题(例如:请求时间:0.489)?
我希望能够将其格式化为:
echo "HTML: $output\n" echo "Request Time: $requestTime"
谢谢!对不起,如果这看起来很简单,我真的是这种语言的新手:)。对我来说,主要问题是从同一个请求中获取所有这些数据——执行两个单独的 curl 请求会非常简单。
马车returns把我扔了。试试这个:
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 -s -w "%{time_connect}\n")
requestTime="${requestTime##*\>}" # Sanitise the last line
echo "Request Time: $requestTime"
head
可能会读取超过 5 行的输入,以便确定它需要输出什么。这意味着您打算传递给 tail
的行可能已被使用。使用单个进程(awk
,在本例中)处理所有输出更安全。
output=$(curl "" -s -w "%{time_connect}\n" | awk 'NR<=5 {print} END {print})