理解Nawk命令的特定行

理解Nawk命令的特定行,awk,syntax,command,nawk,Awk,Syntax,Command,Nawk,我正在学习shell脚本在线课程,因为我的工作要求我学习shell脚本 我遇到了“awk”和“nawk”命令,但我的学习还没有达到这个要求 简而言之,我知道awk/nawk会搜索特定的模式,并在找到匹配的情况下执行操作 尽管如此,我还是不明白下面这句话的意思: eval $( cat ${MMORPHYDIR}/${PWFILE} | nawk ' /^#BEGIN '${ENV_NAME}'/,/^#END '${ENV_NAME}'/ { print }' | egrep "${USEFUL

我正在学习shell脚本在线课程,因为我的工作要求我学习shell脚本

我遇到了“awk”和“nawk”命令,但我的学习还没有达到这个要求

简而言之,我知道awk/nawk会搜索特定的模式,并在找到匹配的情况下执行操作

尽管如此,我还是不明白下面这句话的意思:

eval $( cat ${MMORPHYDIR}/${PWFILE} | nawk ' /^#BEGIN '${ENV_NAME}'/,/^#END '${ENV_NAME}'/ { print }' | egrep "${USEFULL_PARAM}" )
请帮助我了解这条线路的用途

... awk '/start/,/end/'
打印开始模式和结束模式之间的记录<代码>{print}可以省略,因为它是隐含的。脚本中的
^
表示行的开头

请注意,cat和eval是不必要的,它们可以写成

$ awk '...' "${MMORPHYDIR}/${PWFILE}"

此外,grep也可以包含在
awk
脚本中。

awk
标准的通用工具,用于在所有类UNIX系统上操作文本。awk有多种风格,都有相同的核心功能和一些不同之处
nawk
是一个非常不幸的名字newawk,因为大约30年前它被命名为1977soldawk(例如,Solaris上的/bin/awk,也称为旧的、破损的awk,永远不能使用)现在最好避免使用它,因为它甚至不支持POSIX所需的最小awk功能(例如字符类)。这里有一个重要的教训:永远不要在任何软件实体的名称中使用“new”这个词

现在使用的最好的awk是GNUawk
gawk
,因为它支持所有POSIX功能和大量有用的扩展,通常可用,文档非常丰富,并且拥有庞大的用户群

警告:

这简直是一团糟,做了十几件不应该在shell或awk中完成的事情。试图解释这就像试图解释某人用螺丝刀搅拌混凝土一样。忘记你曾经见过它,继续前进


要学习awk,请阅读Arnold Robbins的《有效的awk编程》第四版。

如今,nawk本质上是“唯一的”
awk
;相比之下,很少会遇到旧的
awk
,即“新的awk”(但您可能会在Solaris或AIX等少数系统上找到
oawk
;在这种情况下,不清楚普通的
awk
nawk
还是
oawk
)。GNU Awk拥有
nawk
中未指定的设施(但它支持
nawk
中的所有商品,但不支持
oawk
)。这对你的问题影响不大。代码显示。我同意
cat
是不必要的;
grep
可能也没有必要,因为
awk
支持几乎相同的正则表达式。您确定
eval
不正确吗?它将
cat | awk | grep
集合的输出解释为shell脚本。如果输出包括变量设置,
eval
设置这些变量;您的普通
awk
没有。是的,您是对的
eval
可能需要。我不确定剧本会有什么结果。
eval $( cat ${MMORPHYDIR}/${PWFILE} | nawk ' /^#BEGIN '${ENV_NAME}'/,/^#END '${ENV_NAME}'/ { print }' | egrep "${USEFULL_PARAM}" )