如何用awk统计变量中逗号分隔的字段数量?
统计方括号内逗号分隔的节点数量
面对类似{running_db_nodes,[ejabberd@host002,ejabberd@host001]},的字符串,要统计方括号里逗号分隔的节点数,你已经用gensub提取出了节点串(比如ejabberd@host002,ejabberd@host001)存到nodes变量里,但直接用NF只能拿到原始输入行的字段数,没法统计变量里的内容。这里给你两种可行的awk写法:
方法一:利用$0重新计算字段
把nodes的内容赋值给当前记录$0,重新设置分隔符后用NF获取数量:
/running_db_nodes/ { nodes = gensub(/ {running_db_nodes,\[(.*)\]},/, "\\1", 1) $0 = nodes FS = "," print NF }
方法二:使用split函数分割数组
用split把nodes按逗号分割成数组,数组的长度就是节点数量:
/running_db_nodes/ { nodes = gensub(/ {running_db_nodes,\[(.*)\]},/, "\\1", 1) node_count = split(nodes, temp_arr, ",") print node_count }
两种方法都能准确统计nodes变量里逗号分隔的字符串数量,其中split函数的写法更直观,也不需要修改当前记录和FS,推荐使用。
内容的提问来源于stack exchange,提问作者Richlv
相关产品推荐
相关产品推荐

