我试图将Awk命令的输出分配给变量但我收到错误。我想在变量中分配和回显结果。
count = `awk '$0 ~ /Reason code "68"/' ladb.log | wc -l`
我已将该声明用反引号括起来,并在下面收到此错误
/lsf9/db/dict/=: Unable to open dictionary: No such file or directory
DataArea = does not exist
答案 0 :(得分:0)
您的主要问题是您使用空格。您无法在shell脚本中进行间隔分配。
反引号可能对您的代码有害,但我在很长一段时间内都没有使用IBM AIX,因此它可能对您的Posix shell至关重要(尽管this guide及其覆盖率$(…)
vs `…`
可能不会在这里提出问题)。你可以尝试的一件事是用ksh或bash运行代码。
以下代码假定符合标准的Posix shell。如果他们无法正常工作,请尝试使用"$(…)"
表示法替换"`…`"
表示法。有了这些,因为它只是一个返回的数字,你在技术上不需要周围的双引号,但这是一个很好的做法。
count="$(awk '$0 ~ /Reason code "68"/' ladb.log | wc -l)"
以上应该可行,但可以更清晰地写成
count="$(awk '/Reason code "68"/ {L++} END { print L }' ladb.log)"
正如对问题的评论所述,grep -c
可能比awk更快,但如果您知道该文本的位置,则awk可能会更快。让我们说它开始了一条线:
count="$(awk '$1$2$3 == "Reasoncode\"68\"" {L++} END { print L }' ladb.log)"
是的,Posix shell能够理解"$(…)"
内的双引号与外部双引号无关,因此只需要转义该awk字符串中的内部双引号。