Estaba tratando de encontrar una solución para esta pregunta. Quería usar awk
para la solución.
Mi archivo de entrada es algo como a continuación.
-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4
Usé el awk
comando para extraer los segundos valores después de _
lo siguiente.
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 la salida para obtener solo venkat
y venkat3
en la salida?
Si lo uso en printf
lugar de print
en mi awk
, obtengo venkatvenkat3
como resultado lo que no es lo que quería lograr. Quiero la salida como
venkat
venkat3
Pregunta 2
Usando esos valores como una matriz asociativa o algo así, ¿cómo puedo encontrar si los valores realmente ocurren en la $1
columna?
Quería lograr algo como,
awk -F "_" '$2==1{print $1}' file
EDITAR
No noté la awk
solución de Stephane. ¿Está haciendo lo mismo que había mencionado?
awk
no está haciendo lo mismo. Su enfoque supone que una palabra solo puede estar contenida en otra si está separada por_
. Si bien eso es cierto para el ejemplo del OP, todas las respuestas publicadas también tratan casos comodoglion
y no solodog_lion
.Respuestas:
Pregunta 1
Pregunta 2
fuente
venkat
yvenkat3
según el OP formulado en la otra pregunta. Estoy tratando de encontrar si la clave posterior_
está presente en mi$1
columna.para la pregunta 1, puede usar la opción
--only-delimited
(-s
) decut
fuente
Otro enfoque:
Pregunta 1
Esto solo se imprimirá si
$2
está definido. Es una forma más corta de escribir:Pregunta 2
No tengo nada que agregar que aún no se haya abordado.
fuente
Pregunta 1
Pregunta 2
fuente
venkat
yvenkat3
como salida ya que están presentes$1
. Sin embargo, obtengo todos los$1
valores según su comando.$2
entrada que se ha$2
producido en la primera columna. ¿Es esto correcto?