GNU/Linux >> Tutoriales Linux >  >> Linux

¿Quitar la redundancia de las columnas de salida?

¿Cuál es una forma *NIX de eliminar la redundancia en un caso en el que tengo comparaciones por pares como estas en dos columnas?

    A B
    B A
    A C
    A D
    C A
    D A 
    B C
    C B

A B y B A representan la misma comparación y me gustaría eliminar dicha redundancia del conjunto de datos. El resultado final debería ser

A B
A C
A D
B C

Respuesta aceptada:

doit () 
{ 
    awk '{
           key=$1<=$2? $1 FS $2 : $2 FS $1; 
           if (!seen[key]) print $1,$2
           seen[key]=1
    }'
}
$ doit <test
A B
A C
A D
B C
$

(o poniéndose más breve porque la respuesta de Chris Down es muy dulce)

awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++ {print $1,$2}'

que podría reducirse aún más si no le importan los espacios en sus datos

awk '!seen[$1<=$2? $1 FS $2: $2 FS $1]++'

)

El FS es la variable "separador de campos" de awk, que se utiliza aquí para garantizar que los límites entre los campos clave se identifiquen correctamente. Mi original los tenía juntos, $1$2 , que, como señaló Stephane Chazelas, habría tratado A BC y AB C como duplicados.


Linux
  1. ¿Eliminar los caracteres de control (incluidos los códigos/colores de la consola) de la salida del script?

  2. Lum - ¿Combinar columnas de dos archivos separados?

  3. Linux:¿la columna de búferes en la salida de Free?

  4. Línea de comando:Extraer subcadena de la salida

  5. salida grep de largo a ancho

¿Interceptar entrada y salida de un ejecutable específico?

¿Colorear la salida de los sensores?

¿Cómo ver la salida de un script PHP?

Redirigir la salida de un bloque de funciones a un archivo en Linux

Ejecutar un script de Python desde PHP

¿Cómo canalizar la salida de grep a cp?