¿Cómo imprimir el recuento de patrones en cada línea?

¿Cómo imprimir el recuento de patrones en cada línea?

Necesito imprimir el recuento de una cadena coincidente al final de cada línea.

Un ejemplo de coincidencia foo:

foo,bar,foo,foo
bar,foo,bar,bar
foo,foo,bar,bar

Resultado :

foo,bar,foo,foo,3
bar,foo,bar,bar,1
foo,foo,bar,bar,2

He comprobado este enlace (¿Cómo contar el número de un carácter específico en cada línea?) pero no hubo suerte.

Respuesta1

Podemos usar awk con gsub para obtener el recuento de ocurrencias.

 awk '{print $0","gsub(/foo/,"")}' file

Producción:

foo,bar,foo,foo,3
bar,foo,bar,bar,1
foo,foo,bar,bar,2

Respuesta2

Quizás con una mezcla de bashygrep

$ while read -r line; do 
    echo -n "$line -> " 
    grep -o foo <<<"$line" | wc -l 
  done < /path/to/my-input-file

foo,bar,foo,foo -> 3
bar,foo,bar,bar -> 1
foo,foo,bar,bar -> 2

Respuesta3

Por si alguien también quisiera algo en Python. Especifique el nombre del archivo y la palabra mágica para contar.

#!/usr/bin/python3
# magic_word_count.py
# Takes a filename and magic word and prints the number of times the word
# appears on each line of the file.
#
# ./magic_word_count.py myfile.txt foo
#
import sys 
filename = sys.argv[1]
magic_word = sys.argv[2]

with open(filename, 'r') as f:
    for line in f.readlines():
        words = line.strip().split(',')
        print(len([word for word in words if word == magic_word]))

Uso:

$ cat myfile.txt 
foo,bar,foo,foo
bar,foo,bar,bar
foo,foo,bar,bar

$ ./magic_word_count.py myfile.txt foo
3
1
2

Respuesta4

Usar awky asumir que la entrada es CSV "simple" (sin comas incrustadas ni nuevas líneas):

awk -v string="foo" -F, '
    BEGIN { OFS = FS }
    {
        sum = 0
        for (i = 1; i <= NF; ++i) sum += $i == string
        $(NF+1) = sum
    }; 1' file

Esto toma la cadena cuyas apariciones queremos contar y luego recorre en iteración los campos de cada registro, contando las coincidencias exactas. La suma acumulada de campos coincidentes se agrega como un nuevo campo al final del registro y se imprime el registro.

información relacionada