我有以下curl + awk命令,只要数据只有4行就可以工作,但是,行数可以改变,此时我就会卡住。基本上curl + awk应该只抓住始终以等号(=)结束的最后一行,并且在该行内第二组数字的前3位。
curl "http://www.nws.noaa.gov/view/validProds.php?prod=TAF&node=KOKX" |grep --after-context=2 "KLGA " |head -3 |tail -1 |awk '{print substr($2,0,4)}'
答案 0 :(得分:1)
如果我已正确解释您的要求,这可以满足您的需求。这将选择第一行" KLGA"以等号结束。对于该行,它将打印第二个字段的前三个字符:
curl -s "http://www.nws.noaa.gov/view/validProds.php?prod=TAF&node=KOKX" | awk '/KLGA/{f=1} f && /=$/ {print substr($2,1,3);exit}'
curl的输出被送到这个awk
命令:
awk '/KLGA/{f=1} f && /=$/ {print substr($2,1,3);exit}'
每一步,每次一步:
/KLGA/{f=1}
这会查找包含" KLGA"并将标记f
设置为1
。
f && /=$/ {print substr($2,1,3);exit}
如果标志f
非零且该行以等号结束,则执行以下两个命令:
print substr($2,1,3)
这将打印第二个字段的前三个字符。
exit
因为我们忽略了文件的其余部分,所以退出awk
。
总之,代码会查找包含KLGA
的行。一旦找到该行,通过设置f==1
发出信号,就会查找以等号结尾的第一行。一行,它从第二个字段中提取前三个字符并打印出来。