如何计算列之间的空格

时间:2013-05-30 14:49:26

标签: awk

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

S1,                // name

4 个答案:

答案 0 :(得分:4)

一种方式:

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

测试:

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

结果:

16

答案 1 :(得分: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

答案 2 :(得分:1)

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

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

或基于fedorqui评论的方法:

$ echo 'S1,                // name' | grep -Po '(?<=S1,) *(?=//)' | wc -L 
16

答案 3 :(得分:0)

Pure bash

x='S1,                // name'
x=${x#S1,}
x=${x%//*}
echo ${#x}
16