shell往awk传参数
今天在搞脚本,需求是这样的,有一个文件格式大概是这样的:
180 'xxxanalyzer' 20 'xxxjob' 1 'xxxxxx' |
需要按第一列的数值读取这个文件,比如第一行大于等于20的显示出来,刚开始用的脚本是这样的:
demo.sh
#!/bin/bash threadHold=$1 awk '{if ($1 >= $threadHold) {print $2 " was restarted " $1 " times,"}}' ~/tmp/159.122.224.157_temp |
这样调了一下:./demo.sh 5
执行结果:
180 'xxxanalyzer' 20 'xxxjob' 1 'xxxxxx' |
第三行也出来了,不科学呀,第三行第一列可是1呀,1大于等于5???
百思不解呀,后来把变量threadHold去掉,直接写成5,正常了,正常了,正常了,我去,这是啥意思,后来一琢磨,原来不能直接在awk里使用shell的变量,需要使用的话需要通过-v传给awk:
#!/bin/bash threadHold=$1 awk -v threadHold=$threadHold '{if ($1 >= threadHold) {print $2 " was restarted " $1 " times,"}}' ~/tmp/159.122.224.157_temp |
结果就正常了