Contando o número de itens em um arquivo CSV de linha única?

2

Eu tenho um arquivo contendo uma longa lista de números delimitados por vírgulas, como este:

2,8,42,75,101

Qual é o comando mais simples (a partir de um shell Unix) para obter a contagem de números neste arquivo? No exemplo acima, isso seria 5 .

    
por An̲̳̳drew 29.04.2011 / 20:12

5 respostas

6

O mais fácil é provavelmente contar apenas as vírgulas:

sed 's/[^,]//g' yourfile.csv | wc -c

Normalmente você adiciona um para obter o número de elementos, mas se houver uma nova linha, também é contado. Conveniente neste caso, eu acho.

Também com o awk:

awk -F, '{print NF}' yourfile.csv
    
por 29.04.2011 / 20:34
1

como por aqui: link

isso não é muito difícil

se você puder definir sua lista de elementos em uma matriz da seguinte forma:

ArrayName=("element 1" "element 2" "element 3")

então é tão simples como:

echo ${#ArrayName[@]}

no entanto, você tem um csv, então isso pode ser melhor: link

echo $(cat file.csv | sed ‘s/, /_ /g’ | tr ‘,’ ‘\n’ | wc -l)
    
por 29.04.2011 / 20:21
0

Encontrou esta solução:

cat file.csv | sed 's/,/ /g' | wc -w
    
por 29.04.2011 / 20:40
0

Se você quisesse usar python, poderia fazer:

str = given_csv_line_as_string
if str[-1] == ',': str = str[:-1]
print len(given_csv_line_as_string.split(','))

Observe que isso retornará o tamanho correto, independentemente de haver uma vírgula pendente.

Tenho certeza de que há algo semelhante e mais sysadmin-y no perl, mas não uso o perl.

    
por 29.04.2011 / 21:03
0

Ou use o grep

grep -o "," | wc -l

Na verdade, para obter isso correto, você precisaria adicionar um ao resultado

    
por 07.09.2012 / 17:21