我有一个很长的管道,我经常在我的脚本中重用它,为了让它更容易阅读,我想把管道放在一个变量中。这可能吗?
cat miami.tmp | grep -A5 "$date" | grep -A3 "$nexthour" | grep "celsius" | grep -E -o '[-]?[0-9].[0-9]' | head -n 1 >> miami.txt
我试过了
temperature=$( | grep -A5 "$date" | grep -A3 "$nexthour" | grep "celsius" | grep -E -
o '[-]?[0-9].[0-9]' | head -n 1 )
或
temperature="| grep -A5 "$date" | grep -A3 "$nexthour" | grep "celsius" | grep -E -o '[-]?[0-9].[0-9]' | head -n 1"
但收到错误消息,说找不到命令。
2条答案
按热度按时间h4cxqtbf1#
你应该把它放在一个函数里。
也许您想将日期和小时设置为参数。
另外,它看起来非常希望被重构为Awk。
(未测试,因为您没有提供测试数据。我不得不猜测一些事情。如果您通过系统地循环日期和小时来调用它,可能也要将其重构到Awk脚本中。)
用法:
可能参见https://mywiki.wooledge.org/BashFAQ/050
lokaqttq2#
这是使用bash shell函数的一个很好的例子。
只需确保最后一个命令以分号结尾。
函数也可以有参数,用通常的
$1
、$2
等表示法访问,这些参数可以传入(以空格分隔)到函数中。