卷曲与awk得到最后一行失败

时间:2014-10-05 21:34:12

标签: curl awk

我有以下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)}'  

1 个答案:

答案 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非零且该行以等号结束,则执行以下两个命令:

    1. print substr($2,1,3)

      这将打印第二个字段的前三个字符。

    2. exit

      因为我们忽略了文件的其余部分,所以退出awk

总之,代码会查找包含KLGA的行。一旦找到该行,通过设置f==1发出信号,就会查找以等号结尾的第一行。一行,它从第二个字段中提取前三个字符并打印出来。