Cómo contar el número de valores únicos de un campo en una pestaña archivo de texto delimitado?

Tengo un archivo de texto con una gran cantidad de datos que está delimitado por tabulaciones. Quiero echar un vistazo a los datos para que yo pueda ver los valores únicos de una columna. Por ejemplo,

Red     Ball 1 Sold
Blue    Bat  5 OnSale
............... 

Así, es como la primera columna tiene colores, por lo que quiero saber cuántos diferentes valores únicos que hay en la columna y quiero ser capaz de hacer eso para cada columna.

Necesito hacer esto en una línea de comandos de Linux, por lo que probablemente el uso de algunos script de bash, sed, awk o algo.

Anexo: Gracias a todos por la ayuda, puedo pedir una cosa más? Lo que si quería un recuento de estos valores únicos así?

Supongo que no puse la segunda parte con suficiente claridad. Lo que yo quería hacer es tener una cuenta de «cada uno» de estos valores únicos no sé cuántos valores únicos que existen. Por ejemplo, en la primera columna quiero saber cuántos Rojo, Azul, Verde, etc objetos de colores que existen.

  • uniq -c cuenta por elemento.
  • gracias, esto es lo que yo necesitaba. Me gusta mucho cómo simple pero potente de la línea de comandos de Linux que realmente es. Necesario para empezar a aprender correctamente :).
InformationsquelleAutor sfactor | 2010-08-17

7 Kommentare

  1. 74

    Usted puede hacer uso de cut, sort y uniq comandos de la siguiente manera:

    cat input_file | cut -f 1 | sort | uniq

    obtiene valores únicos en el campo 1, en sustitución de 1 por 2 le dará valores únicos en el campo 2.

    Evitar UUOC 🙂

    cut -f 1 input_file | sort | uniq

    EDICIÓN:

    Para contar el número de ocurrencias usted puede hacer uso de wc comando en la cadena como:

    cut -f 1 input_file | sort | uniq | wc -l
    • uniq -c dará a la cuenta por artículo – wc -l contará el número total de elementos.
  2. 8

    Puede utilizar awk, tipo & uniq para hacer esto, por ejemplo a la lista de todos los valores únicos de la primera columna

    awk < test.txt '{print $1}' | sort | uniq

    Según lo publicado en otros lugares, si usted desea contar el número de instancias de algo se puede canalizar la lista única en wc -l

  3. 2

    Suponiendo que el archivo de datos es en realidad separados por tabulaciones, no el espacio alineados:

    <test.tsv awk '{print $4}' | sort | uniq

    Donde $4 será:

    • $1 – Rojo
    • $2 – Bola
    • $3 – 1
    • $4 – se Vende
  4. 2
    # COLUMN is integer column number
    # INPUT_FILE is input file name
    
    cut -f ${COLUMN} < ${INPUT_FILE} | sort -u | wc -l
  5. 0

    Aquí es un script bash que responde a la (revisado) pregunta original. Es decir, dado cualquier .tsv archivo, proporciona la sinopsis de cada una de las columnas en turno. Aparte de bash en sí, sólo se utiliza el estándar de *ix/Mac tools: sed tr wc corte tipo uniq.

    #!/bin/bash
    # Syntax: $0 filename   
    # The input is assumed to be a .tsv file
    
    FILE="$1"
    
    cols=$(sed -n 1p $FILE | tr -cd '\t' | wc -c)
    cols=$((cols + 2 ))
    i=0
    for ((i=1; i < $cols; i++))
    do
      echo Column $i ::
      cut -f $i < "$FILE" | sort | uniq -c
      echo
    done
  6. 0

    Este script genera el número de valores únicos en cada columna de un archivo dado. Se supone que la primera línea del archivo es cabecera de la línea. No es necesario definir el número de campos. Simplemente guardar la secuencia de comandos en un archivo bash (.sh) y proporcionar la ficha archivo delimitado como un parámetro para esta secuencia de comandos.

    Código

    #!/bin/bash
    
    awk '
    (NR==1){
        for(fi=1; fi<=NF; fi++)
            fname[fi]=$fi;
    } 
    (NR!=1){
        for(fi=1; fi<=NF; fi++) 
            arr[fname[fi]][$fi]++;
    } 
    END{
        for(fi=1; fi<=NF; fi++){
            out=fname[fi];
            for (item in arr[fname[fi]])
                out=out"\t"item"_"arr[fname[fi]][item];
            print(out);
        }
    }
    ' $1

    Ejemplo De Ejecución:

    bash> ./script.sh <path to tab-delimited file>

    Ejemplo De Salida

    isRef    A_15      C_42     G_24     T_18
    isCar    YEA_10    NO_40    NA_50
    isTv     FALSE_33  TRUE_66

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea