我将curl 请求的输出通过管道传送给gawk,以便我可以提取一些数据。如果我正在搜索curl请求生成的html文件,gawk代码已经可以工作了。然而,我希望简单地就地编辑,因为我只需要分配 2 个日期变量。我一直在考虑使用 tee 和流程替换。有没有办法以某种方式分叉curl请求的输出,以便分配2个不同的变量,都使用gawk和命令替换。
这是我的代码片段,我隐藏了curl请求的完整细节,但它将拉出一个html报告,其中包含:最旧的序列、日期和最新的序列、日期在不同的行上。 gawk已经对数据进行了测试。
curl -k -q "https://user:password@ipaddress/report"
我希望将上述命令的输出通过管道传输或以其他方式传输到下面的两个命令
date1="$(date -d $(gawk '/Newest Sequence/ {print $3,$4}') +%s)"
date2="$(date -d $(gawk '/Oldest Sequence/ {print $3,$4}') +%s)"
这可以在不创建文件的情况下实现吗?我将经常运行请求并将结果发送到套接字,如果可能的话,我宁愿避免不必要的文件
答案1
您需要的基本语法是这样的:
read date1 date2 < <( curl ... | gawk '...' )
这样,您只需要一个awk
实例,如下所示(无需添加必须添加的秒转换;见下文):
read date1 date2 < <( curl ... |
awk '
/Newest Sequence/ { new=$3" "$4 }
/Oldest Sequence/ { old=$3" "$4 }
END { print new, old }
'
)
(如果 HTML 文件中日期的顺序是固定的,则可以通过立即打印日期信息来简化。)
请注意,它还gawk
具有必要的时间函数,因此您的date
基础代码将变得过时。在我展示的代码中,您需要添加 awk 的mktime()
调用,或者(为了避免的时间函数)通过修改变量gawk
在 shell 级别进行转换,如下所示:date
date1=$(date -d "${date1}" +%s)
date2=$(date -d "${date2}" +%s)