sed / awk + ​​count char直到相关的char

时间:2010-06-30 14:27:36

标签: sed

亲爱的朋友们

我有以下内容:

   PARAM=1,2,3=,4,5,6,=,7#,8,9

如何用sed / awk计算PARAM到“#”字符之间的偶数“=”字符

例如

 PARAM=1,2,3=,4,5,6,=,7#,8,9

然后sed / awk应该返回3

OR

 PARAM=1,2,3=,4=,5=,6,=,7#,=8,9

然后sed / awk应该返回5

THX

耶尔

2 个答案:

答案 0 :(得分:1)

你可以使用这个衬垫。无需在答案中使用split()。只需使用gsub()。它将返回被替换的东西的数量。另外,将字段分隔符设置为“#”,这样您只需要处理第一个字段。

$ echo "PARAM=1,2,3=,4,5,6,=,7#,8,9" | awk -F"#" '{print gsub("=","",$1)}'
3
$ echo "PARAM=1,2,3=,4=,5=,6,=,7#,=8,9" | awk -F"#" '{print gsub("=","",$1)}'
5

答案 1 :(得分:0)

这是一个使用字段分隔符/拆分查找计数的awk脚本。 IT将字段分隔符设置为#符号,然后拆分第一个单词(=字符上第一个#左边的内容。可能是奇怪的方法,但它是一种方法。请注意,它假设在那里在param的左边没有=个字符。如果这是一个不好的假设,这将不起作用。

BEGIN{ FS="#" }
/PARAM.*#/{
   n = split( $1, a, "=" );
   printf( "Count = %d\n", n-1 );
}

也可以用一行完成:

[]$ export LINE=PARAM=1,2=3,4=5#=6
[]$ echo $LINE | awk 'BEGIN{FS="#"}/PARAM.*#/{n=split($1,a,"="); print n-1;}' 
3