加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

需要awk变量赋值语句解释

发布时间:2020-12-14 01:15:26 所属栏目:Linux 来源:网络整理
导读:好的,直截了当,这是代码,我格式化了一些代码,使其易于阅读: 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=/**/ ; p
好的,直截了当,这是代码,我格式化了一些代码,使其易于阅读:

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.

没有神秘感,没有什么奇怪的……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读