Cuenta número de nombre diferente en un archivo -- text-processing campo con grep campo con awk campo con wc camp askubuntu Relacionados El problema

Count number of different name in a file


6
vote

problema

Español

Quiero contar la cantidad de nombre diferente en un archivo de texto de esta presentación:

  2008 girl Avah 2009 girl Avah 2008 girl Carleigh 2011 girl Kenley 2012 boy Joseph 2013 boy Joseph 2014 boy Isaac 2014 boy Brandon   

Así que, básicamente, quiero omitir el duplicado y tener como respuesta 6. Lo intenté con awk para acceder solo a la tercera columna, pero no puedo entenderlo para imprimir el número de líneas. < / p>

Original en ingles

I want to count the number of different name in a text file of this presentation:

2008 girl Avah 2009 girl Avah 2008 girl Carleigh 2011 girl Kenley 2012 boy Joseph 2013 boy Joseph 2014 boy Isaac 2014 boy Brandon 

So basically I want to skip the duplicate and have as an answer 6. I tried with awk to access only the third column but I can't get it to print the number of lines.

           

Lista de respuestas

6
 
vote

con awk :

  ABCDEFGHIJKLMNABCDEFGHIJKLMN8   

Si el nuevo nombre encontró !nameSeen[$3]++ incremented contador bigopenfiles0 y en el bigopenfiles1 Print Counter Value.

 

with awk:

<fileName awk '!nameSeen[$3]++{ count++ } END{ print count }' 

if new name found !nameSeen[$3]++ increment counter count++ and at the END print counter value.

 
 
6
 
vote

Dado que su archivo parece estar pre-ordenado en la columna Nombre, podría usar bigopenfiles2 con el bigopenfiles3 ( abcdefghijklmnabcdefghijklmnbigopenfiles4 ) Salga solo la primera línea de cada nombre, y líneas de conteo:

  bigopenfiles5  

o

  bigopenfiles6  

Si sus datos son no preinstalados, puede combinar bigopenfiles7 con una especificación de campo para lograr lo mismo (aunque es No se documenta claramente en el GNU ABCDEFGHIJKLMNABCDEFGHIJKLMN19 HAN Página):

  alias bigopenfiles='sudo lsof / | awk '''{if($7 > 1048576) print $7/1048576 "MB" " " $9 }''' | sort -n -u' 0  

Es excesivo para esta tarea, sin embargo, también podría usar GNU DataMash:

  alias bigopenfiles='sudo lsof / | awk '''{if($7 > 1048576) print $7/1048576 "MB" " " $9 }''' | sort -n -u' 1  
 

Since your file appears to be pre-sorted on the name column, you could use uniq with the -f (--skip-fields) option to output only the first line of each name, and count lines:

uniq -f2 FileName | wc -l 

or

uniq --skip-fields=2 FileName | wc -l 

If your data are not pre-sorted, you can combine sort -u with a -k field specification to achieve the same thing (although it's not clearly documented in the GNU sort man page):

sort -uk3 FileName | wc -l 

It's overkill for this task, however you could also use GNU Datamash:

datamash -W countunique 3 < FileName 
 
 
     
     
2
 
vote

Una manera realmente corta y fácil, usando Miller ( https://github.com/johnkerl/miller)

  alias bigopenfiles='sudo lsof / | awk '''{if($7 > 1048576) print $7/1048576 "MB" " " $9 }''' | sort -n -u' 2  
 

A really short and easy way, using Miller (https://github.com/johnkerl/miller)

mlr --nidx uniq -g 3 -n input.txt 
 
 
2
 
vote

Una forma bastante simple que se explica a sí misma:

  cat FileName | sed 's/[0-9]*//g' | sed 's/<boy>//g' | sed 's/<girl>//g' | sort -u | wc -l   

o para satisfacer @ αғsнιη's preocupación por uuoc :

  <FileName sed 's/[0-9]*//g' | sed 's/<boy>//g' | sed 's/<girl>//g' | sort -u | wc -l   

o Otro uuoc Comando compatible:

  sed 's/[0-9]*//g' <FileName | sed 's/<boy>//g' | sed 's/<girl>//g' | sort -u | wc -l   

un aviso a @rebi khalifa :

@ αғsнιη correctamente escribió en los comentarios a continuación:

o <fileName cut -d' ' -f3 |sort -u |wc -l ; ABCDEFGHIJKLMNABCDEFGHIJKLMN4 ES uuoc

@steeldriver correctamente escribió en los comentarios a continuación:

Sugeriría usar ABCDEFGHIJKLMNABCDEFGHIJKLMN5 en lugar de todos los comandos abcdefghijklmn6defghijklmn6 debería al menos combinarlos en una sola invocación ex. ABCDEFGHIJKLMNABCDEFGHIJKLMN7

Ambos usaban selección de campo Enfoque, que es el enfoque mismo que intentaba implementar para resolver tu problema basado en lo que escribías en tu pregunta :

Intenté con AWK para acceder a la tercera columna pero no puedo conseguirlo Imprime el número de líneas.


¡No necesita ser sofisticado para hacer las cosas en Ubuntu! Las cosas se pueden hacer de muchas maneras inimaginables.

Una forma en que elogia a la principio de beso es tipe | Comandos simples uno a la siguiente hasta que se realice la misión:

  • Lea el contenido del archivo con cat FileName - & gt;
  • pipa <FileName sed 's/[0-9]*//g' | sed 's/<boy>//g' | sed 's/<girl>//g' | sort -u | wc -l 0 - & gt;
  • Eliminar Grupos de números con <FileName sed 's/[0-9]*//g' | sed 's/<boy>//g' | sed 's/<girl>//g' | sort -u | wc -l 1 - & gt;
  • TUBO IT ABCDEFGHIJKLMNABCDEFGHIJKLMN12 - & gt;
  • Eliminar la palabra boy con <FileName sed 's/[0-9]*//g' | sed 's/<boy>//g' | sed 's/<girl>//g' | sort -u | wc -l 3 - & gt;
  • TUBO IT ABCDEFGHIJKLMNABCDEFGHIJKLMN14 - & gt;
  • Retire la palabra girl con <FileName sed 's/[0-9]*//g' | sed 's/<boy>//g' | sed 's/<girl>//g' | sort -u | wc -l 5 - & gt;
  • solo nombres se queda ahora ... - & gt;
  • pipe <FileName sed 's/[0-9]*//g' | sed 's/<boy>//g' | sed 's/<girl>//g' | sort -u | wc -l 6 - & gt;
  • Ordenar los nombres y eliminar duplicados con <FileName sed 's/[0-9]*//g' | sed 's/<boy>//g' | sed 's/<girl>//g' | sort -u | wc -l 7 - & gt;
  • solo nombres únicos AR se queda ahora - & gt;
  • TUBO IT ABCDEFGHIJKLMNABCDEFGHIJKLMN18 - & gt;
  • cuenta las líneas con <FileName sed 's/[0-9]*//g' | sed 's/<boy>//g' | sed 's/<girl>//g' | sort -u | wc -l 9 - & gt;
  • hecho
 

A rather simple quick way that explains itself:

cat FileName | sed 's/[0-9]*//g' | sed 's/\<boy\>//g' | sed 's/\<girl\>//g' | sort -u | wc -l 

Or to satisfy @xcexb1xd2x93sxd0xbdxcexb9xcexb7's concern about UUoC:

<FileName sed 's/[0-9]*//g' | sed 's/\<boy\>//g' | sed 's/\<girl\>//g' | sort -u | wc -l 

Or another UUoC compliant command:

sed 's/[0-9]*//g' <FileName | sed 's/\<boy\>//g' | sed 's/\<girl\>//g' | sort -u | wc -l 

A notice to @Rebi Khalifa:

@xcexb1xd2x93sxd0xbdxcexb9xcexb7 rightly wrote in the comments below:

or <fileName cut -d' ' -f3 |sort -u |wc -l; cat filename | ... is UUoC

@steeldriver rightly wrote in the comments below:

I'd suggest using cut rather than all those sed commands - you should at least combine them into a single invocation ex. sed -E -e 's/^[0-9]+//' -e 's/\b(boy|girl)\b//'

They both used field selection approach which is the same approach you were trying to implement to solve your issue based on what you wrote in your question:

I tried with awk to access only the third column but I can't get it to print the number of lines.


One does not need to be sophisticated to get things done in Ubuntu! Things can be done in many unimaginable ways.

One way which praises the KISS principle is to pipe | simple commands one to the next until mission is accomplished:

  • Read the content of the file with cat FileName -->
  • Pipe it | -->
  • Remove number groups with sed 's/[0-9]*//g' -->
  • Pipe it | -->
  • Remove the word boy with sed 's/\<boy\>//g' -->
  • Pipe it | -->
  • Remove the word girl with sed 's/\<girl\>//g' -->
  • Only names are left now... -->
  • Pipe it | -->
  • Sort the names and remove duplicates with sort -u -->
  • Only unique names ar left now -->
  • Pipe it | -->
  • Count the lines with wc -l -->
  • Done
 
 
         
         

Relacionados problema

24  Comando "WC -C" y "WC -M" en Linux  ( Wc c and wc m command in linux ) 
Tengo un archivo de texto, su contenido es: i k k Cuando uso wc -m para contar números de caracteres en este archivo, el resultado es 7 . Pregunta...

1  Contando archivo específico en el directorio  ( Counting specific file in directory ) 
Deje que asuman, necesito contar todos los archivos en el directorio que termine con o. (Por ejemplo, AB12.14O, 70010340.09O). ¿Qué comando necesito usar? I...

4  Problema con el listado de un directorio a grep  ( Problem with listing a directory to grep ) 
grep parece romperse en mi máquina. Reinstalarlo no ayuda. Un reinicio no ayuda. Las primeras dos líneas crean un archivo que contiene texto arbitrario y la...

4  `WC -C` ¿Da resultados de la ONU esperados?  ( Wc c gives un expected results ) 
Tengo un archivo .log, que es un archivo binario (bsc0000.log). Así lo vio en un espectador hexagonal (Okteta) y lo exportó directamente a una cadena (Split_S...

12  Al contar líneas con WC, no imprima un error cuando sea un directorio  ( When counting lines with wc dont print an error whenever is a directory ) 
Quiero contar el número total de líneas en todos los archivos /etc , pero no los archivos en los subbitres, así que escribí: wc -l /etc/* | tail -1 y la sa...

7  ¿Cómo eliminar el nombre de archivo de la salida WC -L?  ( How to remove the filename from wc l output ) 
Quiero contar el número de líneas en un archivo usando ABCDEFGHIJKLMNABCDEFGHIJKLMN1 , pero solo emite el número, sin el siguiente espacio y nombre de archiv...

3  ¿Cómo puedo poner el resultado del comando WC en una expansión aritmética?  ( How can i pipe the result of the wc command into an arithmetic expansion ) 
Quiero ejecutar wc -l y usar el resultado en una expansión aritmética. En otras palabras, quiero hacer algo como esto: wc -l (now somehow pipe/pass the r...

9  ¿Cómo puedo contar los personajes del texto copiados en el portapapeles?  ( How can i count characters of text copied in the clipboard ) 
He seleccionado algún texto y copiarlo usando ctrl + c . Ahora el texto está en el portapapeles del sistema. Puedo pegar este código usando CTRL + v en...

0  Edición de salida WC -L SRC  ( Editing wc l src output ) 
Soy nuevo en el tema y trabajando en algunos comandos de Bash. Estoy atascado en una tarea en la que necesito T OUPUT mi resultado en un formato específico....

1  contando en el directorio  ( Counting in directory ) 
Me gustaría saber cuál es la diferencia entre: $ ls | wc -l y ABCDEFGHIJKLMNABCDEFGHIJKLMN5 Al contar todos los archivos en los directorios actua...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos