GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo encontrar la palabra más frecuente en un archivo .csv, ignorando los duplicados en cada línea?

Necesito encontrar las 10 palabras más frecuentes en un archivo .csv.
El archivo está estructurado para que cada línea contenga palabras separadas por comas. Si la misma palabra se repite más de una vez en la misma línea, debe contarse como una.
Entonces, en el siguiente ejemplo:

green,blue,blue,yellow,red,yellow
red,blue,green,green,green,brown

verde, azul y rojo deben contarse como 2 y amarillo y marrón como 1

Sé que se han hecho preguntas similares antes, y una solución fue:

<file.csv tr -c '[:alnum:]' '[\n*]' | sort|uniq -c|sort -nr|head  -10

Pero esto contará el número de veces que aparece una palabra en la misma línea, así:

  4 green
  3 blue
  2 yellow
  2 red
  1 brown

y esto no es realmente lo que necesito.
¿Alguna ayuda? También agradeceré una breve explicación del comando y por qué el comando que encontré en preguntas similares no hace lo que necesito.

Respuesta aceptada:

Probablemente buscaría perl

  • Usar uniq de la List::Util módulo para deduplicar cada fila.
  • Use un hash para contar las ocurrencias resultantes.

Por ejemplo

perl -MList::Util=uniq -F, -lnE '
  map { $h{$_}++ } uniq @F 
  }{ 
  foreach $k (sort { $h{$b} <=> $h{$a} } keys %h) {say "$h{$k}: $k"}
' file.csv
2: red
2: green
2: blue
1: yellow
1: brown

Si no tiene otra opción que sort y uniq coreutils, entonces puede implementar un algoritmo similar con la adición de un bucle de shell

while IFS=, read -a words; do 
  printf '%s\n' "${words[@]}" | sort -u
done < file.csv | sort | uniq -c | sort -rn
  2 red
  2 green
  2 blue
  1 yellow
  1 brown

sin embargo, consulte ¿Por qué se considera una mala práctica el uso de un bucle de shell para procesar texto?


Linux
  1. Cómo insertar texto al comienzo de cada línea en Vim

  2. ¿Encontrar las N palabras más frecuentes en un archivo?

  3. ¿Encontrar las N palabras más frecuentes en un archivo con una lista de palabras vacías desde la línea de comandos?

  4. ¿Cómo encontrar el tipo de archivo Img y montarlo?

  5. ¿Cómo encontrar el índice de una palabra en una cadena en bash?

Cómo encontrar el archivo más antiguo en un árbol de directorios en Linux

Cómo encontrar las líneas más largas en un archivo en Linux

Cómo arreglar la línea verde en la parte inferior en VLC en Linux

¿Cómo encuentro la ubicación MySQL my.cnf?

¿Cómo puedo crear un archivo en cada carpeta?

¿Cómo puedo anteponer una cadena al comienzo de cada línea en un archivo?