Honestamente, a maneira mais fácil é usar awk
:
awk -F'\t' '{print NF-1}' foo
NF
é o número de campos, -F'\t'
informa awk
para dividir campos nas guias, portanto, o número de guias será um a menos que o número de campos, e é por isso que temos awk
print NF-1
.
Se você realmente não quer usar awk
você poderia fazer ( nota: isso não conta as abas finais no final de cada linha):
$ while read line; do echo "$line" | fold -1 | grep -c $'\t'; done < foo
2
4
0
1
0
Para lidar com guias iniciais e finais, bem como com outros caracteres estranhos (como barras invertidas), faça isso:
$ while IFS= read line; do echo "$line" | fold -1 | grep -c $'\t'; done < foo
-
while read lines; do ... ; done < foo
: leia cada linha do arquivo foo
na variável $line
.
-
echo "$line" | fold -1
: o comando fold irá imprimir um caractere por linha
-
grep -c $'\t'
: isso é executado em cada linha do arquivo ( $line
), mas desde
$line
foi dobrado em um caractere por linha, grep -c
contará o número de guias nessa linha. Se você não for fold
, grep -c
contará o número de linhas correspondentes e não fornecerá uma linha de contagem de guias por .
Você também pode usar o Perl, mas acho que não está disponível também. Aqui está um caminho, independentemente:
perl -lne '@a=/\t/g;print scalar @a' foo