LDD3 中 awk 语句的解释

来源:互联网 发布:制作拜年视频软件 编辑:程序博客网 时间:2024/04/30 12:33


ldd3的一个创建节点的shell脚本中,用到了awk文本处理工具,在这里做一下解释。

   原句:major=$(awk "\\$2==\"$module\" {print \\$1}"/proc/devices)

 

       Module变量在脚本中定义为 scull.

       /proc/devicesawk要处理的输入文件。

       $2,$1,分别代表输入文件中的每条记录的第二个域和第一个域,域之间的分隔符默认是空格。

 

式中的那几个斜杠是什么意思?

    在awk中,\是转义字符,就是让其后面的元字符显示本意(而不是shell赋予它们的意义)。这样,\\$2就变成了\$2\",就是"

 

为什么是\$2

shell中,$后面跟变量,如果直接是$2,就代表调用shell脚本时传入的第二个参数,而不是上面我们谈到的含义,这就是要加 \ 的原因,它要求$2原封不动传给awk,不然就被shell替换为输入参数了。

 

这句话的意思是从输入文件/proc/devices检查记录,若第二个域是scull,则打印记录的第一个域,也就是设备的主设备号,并将这个值赋给了major

 

awk的执行动作的部分是放在单引号内的,但是上面的语句是将动作放在双引号内,什么原因?

这是因为命令已经传给awk了,引号已经没了。 shell里面这个引号是为了阻止print{}里的内容作为shell的命令块处理

 

0 0