Cómo buscar una cadena a partir de la segunda columna

Cómo buscar una cadena a partir de la segunda columna

Tengo un archivo que contiene cadenas separadas por comas. Las cadenas pueden contener puntos (es decir, no sólo caracteres alfanuméricos). Esto es un ejemplo:

site1.com,Level1.2
site2.com,Level1.1,Level1.0,Level1.2
site3.com,Level1.2
site4.com,Level1.2,Level1.1,Level1.0,Levelv3
siteLevel1.2,Levelv2
Level1.2,Levelv2

Necesito buscar los nombres de los sitios (tenga en cuenta que no tengo un formato específico para el nombre del sitio, es decir, no siempre termina en .com, por lo que no debo considerar cómo se ve la primera columna).

Necesito los sitios queSOLOcontiene una cadena específica. En este ejemplo,Level1.2 exclusivamente(sin Nivel1.1 ni Nivel1.0 ni Nivel3ya sea antes o después). Luego imprima el resultado en un nuevo archivo que coincida con la condición (solo contiene el Nivel 1.2). Entonces, las palabras clave de búsqueda comienzan desde la segunda columna (no quiero que un resultado de búsqueda encuentre un patrón coincidente en el nombre del sitio).

Entonces, si estoy buscando el Nivel 1.2, el nuevo archivo debería contener:

site1.com,Level1.2
site3.com,Level1.2

Pero mi comando resulta en:

site1.com,Level1.2
site3.com,Level1.2
siteLevel1.2,Levelv2
Level1.2,Levelv2

Si hay un sitio que contiene Nivel1.2 en su nombre, no debe contarse ya que no me importa la primera columna.

Probé este comando y me funciona. Lo único es que necesito que la búsqueda ignore la aparición de la cadena de búsqueda en la primera columna.

awk '/Level1.2/ && !/Level1.1/ && !/Level1.0/ !/Level3/' myfile.txt > result.txt

Respuesta1

Puedes probar esto awk:

awk -F, '$2=="Level1.2" && NF==2' myfile.txt

El delimitador de entrada está establecido en ,. El comando imprime líneas que contienen 2 campos y el segundo tiene la cadena coincidente.

Respuesta2

Las siguientes obras:

grep '^[^,]*,Level1\.2' myfile.txt | grep -v ',Level.*Level'

Esto omite el primer campo y la coma final, luego busca una coincidencia con Level1.2; Luego, el resultado se filtra ignorando todos los registros con un subsiguiente Level(cualquiera Levelen el primer campo no tendrá una coma precedente).

He asumido que se puede agregar otro texto Level1.2, siempre que no contenga una Levelcadena. Si esto no es cierto, entonces puedes usar el más simple:

grep '^[^,]*,Level1\.2$' myfile.txt

información relacionada