Como encontrar o número de palavras separadas por _ _?

0

Eu quero fazer um comando Unix que leia uma string e conte quantas palavras ela contém. No meu caso, as palavras são separadas por um caractere _ (sublinhado), não espaços.

Por exemplo, TABLE_PERSON contém duas palavras, então o comando deve imprimir "2".

Como posso fazer isso?

    
por user316467 22.05.2014 / 20:42

2 respostas

2

Se a sua string não contiver espaços, você pode substituir o _ por um espaço (com tr ( translate character ) ou sed ( editor de fluxo )) e use wc ( contagem de palavras ) para contar as palavras:

 $ echo TABLE_PERSON | tr '_' ' ' | wc -w
 2

ou

 $ echo TABLE_PERSON | sed 's/_/ /' | wc -w
 2

se a sua cadeia contiver espaços que não tenham de ser considerados como um separador (por exemplo, se "TABLE_PERSON 2" contar como duas palavras separadas por _ : TABLE e PERSON 2 ), pode primeiro remover os espaços com qualquer caractere (por exemplo, - ) e use o mesmo comando:

 $ echo 'TABLE_PERSON 2' | tr ' ' '-' | tr '_' ' ' | wc -w
 2
    
por 22.05.2014 / 20:57
0

Muitas maneiras, muitas das quais são fáceis de descobrir:

#!/bin/sh
n=$(tr -dc "_" | wc -c)
echo $((n+1))
#!/bin/sh
tr " _" "x " | wc -w
#!/usr/bin/env bash
read -r string
len1=${#string}
string=${string//_/}
len2=${#string}
echo $((len1-len2+1))
#!/usr/bin/env perl
print (scalar split /_/, <STDIN&gt)."\n";
#!/usr/bin/env python3
import sys
print(len(sys.stdin.readline().split("_")))
#!/usr/bin/env ruby
puts gets.split(/_/).length
#include <stdio.h>
int main(void) {
    int c, n = 1;
    for (;;) {
        c = getchar();
        if (c == EOF || c == '\n')
            break;
        else if (c == '_')
            n++;
    }
    printf("%u\n", n);
    return 0;
}
    
por 22.05.2014 / 21:01