如何计算以下行之间的空格数(16) :S1,
//
S1, // name
单程:
awk -F '//' '{ n = gsub(/ /, "", $1); print n }'
测试:
echo 'S1, // name' | awk -F '//' '{ n = gsub(/ /, "", $1); print n }'
结果:
16
如果您真的想要awk
,那么您可以在以下基础上进行构建。
$ echo "S1, // name" | awk '{x=gsub(/ /," ",$0); print x}'
17
gsub
返回进行的替换次数。显然,这个正则表达式也会找到并计算其他空格,但你明白了。
或尝试这样的事情:
echo "S1, // name" |
awk -F[,/] ' { for (i=1;i<=NF;i++) print "$"i " is \""$i"\" of length, " length($i);}'
$ echo "S1, // name" | awk -F[,/] ' { for (i=1;i<=NF;i++) print "$"i " is \""$i"\" of length, " length($i);}'
$1 is "S1" of length, 2
$2 is " " of length, 16
$3 is "" of length, 0
$4 is " name" of length, 5
计算之间的所有空格S1,
并且//
仅使用awk
:
$ echo 'S1, // name' | awk -F'[,/]' '{print length($2)}'
16
或基于fedorqui评论的方法:
$ echo 'S1, // name' | grep -Po '(?<=S1,) *(?=//)' | wc -L
16
纯粹的 bash
x='S1, // name'
x=${x#S1,}
x=${x%//*}
echo ${#x}
16