awk模式
BEGIN 和 END,BEGIN 被放置在没有读取任何数据之前,而 END 被放置在所有的数据读取完成以后执行
体现如下: BEGIN{}: 读入第一行文本之前执行的语句,一般用来初始化操作 {}: 逐行处理 END{}: 处理完最后一行文本后执行,一般用来处理输出结果
分割字符串
awk规定引用系统变量必须使用单引号加双引号,即'"$sysvar"'这样的格式,
但是split函数也需要双引号来定界,但这个双引号又不能让sh解释,而应留给awk来解释,所以使用了\"和\"组成的双引号
s="0,1,2,3" awk 'BEGIN{split('"\"$s\""',myarray,","); for(i in myarray) {if(myarray[i]>1) print myarray[i]}}'
输出2 3
分割字符串后与文件中字符匹配
文件内容:
xx|yy|000|aa|0|cc|cc|cc|
对于上述内容如果第5个字段可以匹配字符串s的字符,就打印输出,否则滤掉
s="0,1,2,3" array=(${s//,/ }) #echo "${array[@]}" awk -F '|' 'BEGIN{split('"\"$s\""',myarray,",")} {for(i in myarray) {if($5 == myarray[i])print $0}}' text.txt