1

如何计算以下行之间的空格数(16) :S1,//

S1,                // name
4

4 回答 4

4

单程:

awk -F '//' '{ n = gsub(/ /, "", $1); print n }'

测试:

echo 'S1,                // name' | awk -F '//' '{ n = gsub(/ /, "", $1); print n }'

结果:

16
于 2013-05-30T14:55:05.050 回答
2

如果您真的想要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
于 2013-05-30T14:55:31.690 回答
1

计算之间的所有空格S1,并且//仅使用awk

$ echo 'S1,                // name' | awk -F'[,/]' '{print length($2)}'
16

或基于fedorqui评论的方法:

$ echo 'S1,                // name' | grep -Po '(?<=S1,) *(?=//)' | wc -L 
16
于 2013-05-30T15:04:37.163 回答
0

纯粹的 bash

x='S1,                // name'
x=${x#S1,}
x=${x%//*}
echo ${#x}
16
于 2013-05-30T15:00:18.547 回答