eliminar líneas en blanco en la pantalla awk

eliminar líneas en blanco en la pantalla awk

Estaba tratando de encontrar una solución paraestepregunta. Quería usar awkpara la solución.

Mi archivo de entrada es algo como el siguiente.

-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4

Utilicé awkel comando para extraer los segundos valores después _como se muestra a continuación.

awk -F "_" '{print $2}' file

Sin embargo, aunque el comando anterior imprime los valores correctos, obtengo líneas en blanco en mi salida. Tengo 2 preguntas.

Pregunta 1

¿Cómo puedo eliminar las líneas en blanco en el resultado para obtener solo venkaty venkat3en el resultado?

Si lo uso printfen lugar de printen mi awk, obtengo venkatvenkat3un resultado que no quería lograr. Quiero el resultado como,

venkat
venkat3

Pregunta 2

Utilizando esos valores comomatriz asociativao algo así, ¿cómo puedo saber si los valores realmente aparecen en $1la columna?

Quería lograr algo como,

awk -F "_" '$2==1{print $1}' file

EDITAR

No noté la awksolución de Stéphane. ¿Está haciendo lo mismo que había mencionado?

Respuesta1

Otro enfoque:

Pregunta 1

awk -F_ '$2{print $2}' file

Esto sólo se imprimirá si $2está definido. Es una forma más corta de escribir:

awk -F_ '{if($2){print $2}}' file

Pregunta 2

No tengo nada que agregar que no se haya abordado ya.

Respuesta2

Pregunta 1

$ awk -F _ 'NF > 1 {print $2}' file
venkat
venkat3

Pregunta 2

$ awk -F _ '
    NR == FNR {a[$1];next}
    ($2 in a) {print $2}
' file file
venkat
venkat3

Respuesta3

para la Pregunta 1, puede utilizar la opción --only-delimited( ) de-scut

cut -s -f2 -d'_' file
venkat
venkat3

Respuesta4

Pregunta 1

awk -F "_" '/_/ {print $2}' file

Pregunta 2

awk -F "_" '{values[$1]=1;}; END {for (val in values) print val;}' file

información relacionada