Contando os caracteres separados por vírgula em uma linha

4

Como posso contar quantos elementos são separados por vírgula em uma determinada coluna de um arquivo (tab_delimited), usando awk ou sed?

Exemplo:

AC    1,23,5
DC    2,8,89

retornaria:

AC    3
DC    3
    
por dovah 12.07.2014 / 21:29

2 respostas

6
$ awk -F '[\t,]' '{print $1, NF-1}' some_file

onde

  • -F define o separador de campo, ou seja, guia ou vírgula
  • $1 referencia o primeiro campo
  • NF é uma variável interna que contém o número de campos em um registro
  • a instrução awk é executada para cada registro (ou seja, para cada linha)
por 12.07.2014 / 21:37
2
awk -v col=2 -F '\t' '{$col=gsub(",", "", $col)+1; print}'

col é um parâmetro que representa o número da coluna analisada e -v atribui 2 a ele.

-F '\t' define o separador de campo como o caractere de tabulação 1 . gsub retorna o número de substituições, por isso está sendo usado para contar as número de vírgulas. O resultado é atribuído à coluna analisada e o% final print exibe todas as colunas.

$ cat input 
AC  1,23,5
DC  2,8,89
XX  3,4,5,6,7   YYY,ZZZ
$ awk --assign col=2 -F '\t' '{$col=gsub(",", "", $col)+1; print}' < input
AC 3
DC 3
XX 5 YYY,ZZZ

1 Algumas implementações do awk podem não analisar \t e nesse caso você pode usar algum Bash específico citando - $'\t' - que passará o próprio caractere de tabulação para awk.

    
por 12.07.2014 / 21:36

Tags