需要awk变量赋值语句解释
好的,直截了当,这是代码,我格式化了一些代码,使其易于阅读:
awk '{ t=$0 ; $0=t ; $0=// ; print "$0=// ; value of $0 is ",$0 $0=t ; $0=/./ ; print "$0=/./ ; value of $0 is ",$0 $0=t ; $0=/*/ ; print "$0=/*/ ; value of $0 is ",$0 $0=t ; $0=/**/ ; print "$0=/**/ ; value of $0 is ",$0 $0=t ; $0=/[0-9]/ ; print "$0=/[0-9]/ ; value of $0 is ",$0 $0=t ; $0=/[a-z]/ ; print "$0=/[a-z]/ ; value of $0 is ",$0 $0=t ; $0=/[0-9][a-z]/ ; print "$0=/[0-9][a-z]/ ; value of $0 is ",$0 $0=t ; $0=/5/ ; print "$0=/5/ ; value of $0 is ",$0 $0=t ; $0=/55/ ; print "$0=/55/ ; value of $0 is ",$0 $0=t ; $0=/x/ ; print "$0=/x/ ; value of $0 is ",$0 $0=t ; $0=/5x/ ; print "$0=/5x/ ; value of $0 is ",$0 $0=t ; $0=/x5/ ; print "$0=/x5/ ; value of $0 is ",$0 $0=t ; $0=/xoo/ ; print "$0=/xoo/ ; value of $0 is ",$0 $0=t ; $0=/500/ ; print "$0=/500/ ; value of $0 is ",$0 }'<<<"5x" 我得到了这个输出: $0=// ? ? ? ? ? ; value of $0 is ?1 $0=/./ ? ? ? ? ?; value of $0 is ?1 $0=/*/ ? ? ? ? ?; value of $0 is ?0 $0=/**/ ? ? ? ? ; value of $0 is ?1 $0=/[0-9]/ ? ? ?; value of $0 is ?1 $0=/[a-z]/ ? ? ?; value of $0 is ?1 $0=/[0-9][a-z]/ ; value of $0 is ?1 $0=/5/ ? ? ? ? ?; value of $0 is ?1 $0=/55/ ? ? ? ? ; value of $0 is ?0 $0=/x/ ? ? ? ? ?; value of $0 is ?1 $0=/5x/ ? ? ? ? ; value of $0 is ?1 $0=/x5/ ? ? ? ? ; value of $0 is ?0 $0=/xoo/ ? ? ? ?; value of $0 is ?0 $0=/500/ ? ? ? ?; value of $0 is ?0 我不明白为什么我得到这个输出.我以为awk会抱怨任务声明,但它没有……当我做$0 = / xxx /时,似乎awk正在进行奇怪的正则表达式匹配检查.也就是说,$0 = / pattern /与$0 = $0~ / pattern /?相同 然后我做了这个测试: kent$ echo "xx"|awk '{y="777";y=/x/;print y}' 1 kent$ echo "xx"|awk '{y="777";y=/7/;print y}' 0 所以看来,foo = / pattern /与foo = $0~ / pattern /相同 但我不确定…无法在文档/手册页中找到信息. 当我在这里回答一个awk问题时,我找到了它. 我用我的awk测试过: kent$ awk --version|head -1 GNU Awk 4.1.0,API: 1.0 (GNU MPFR 3.1.2,GNU MP 5.1.2) 如果有人能解释我,我很感激.提前致谢. 编辑 经过更多的测试,结果证明(再次,不确定,因为我没有在文档中找到它),在{…}中,/ pattern / alone是$0~ / pattern /的简短形式,在外面{…},比如/ patter / {做某事}.所以我们可以这样做: kent$ echo "xx"|awk '{if(/x/)print "ok"}' ok 我不知道它是否是awk脚本语法的标准功能.如果它适用于所有awk实现.我还在搜索手册和手册页…… 解决方法
/ regexp /只是$0~ / regexp /的简写
var =($0~ / regexp /)为var分配比较结果,1为true,否则为零. $0 =($0~ / regexp /)为$0和/ regexp /的比较结果分配$0 $0 =($0~ //)为$0分配$0的结果,总是有,所以条件为真所以结果为1 $0 = //做同样的事情 $0 = / * /正在寻找$0中的文字*,但结果不是零. $0 = / ** /正在寻找文字*重复ZERO或更多次$0,其中有零,因此结果为1. 没有神秘感,没有什么奇怪的…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |