awk处理字符串分割

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
posted @ 2019-12-11 16:37  一只小小的寄居蟹  阅读(6463)  评论(0)    收藏  举报