Como pesquisar uma string a partir da segunda coluna

0

Eu tenho um arquivo que contém strings separadas por vírgula. As cadeias podem conter pontos (ou seja, não apenas caracteres alfanuméricos). Este é um exemplo:

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

Eu preciso pesquisar os nomes dos sites (observe que não tenho um formato específico para o nome do site, ou seja, ele não termina com .com sempre, portanto, não devo considerar como é a primeira coluna)

Preciso dos sites que SOMENTE contêm uma string específica. Neste exemplo, Level1.2 exclusivamente (sem Level1.1 nem Level1.0 e não Level3 antes ou depois de ). Em seguida, imprima o resultado em um novo arquivo que corresponda à condição (contém apenas Nível1.2). Portanto, as palavras-chave de pesquisa estão começando na segunda coluna (não desejo o resultado da pesquisa que encontre o padrão correspondente no nome do site).

Então, se eu estou procurando por Level1.2, o novo arquivo deve conter:

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

Mas o meu comando resulta em:

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

Se houver um site que contenha Level1.2 em seu nome, isso não deve ser contado, pois não me importo com a primeira coluna.

Eu tentei este comando e funciona para mim. A única coisa é que preciso da pesquisa para ignorar a ocorrência da string de pesquisa na primeira coluna.

awk '/Level1.2/ && !/Level1.1/ && !/Level1.0/ !/Level3/' myfile.txt > result.txt
    
por user9371654 06.06.2018 / 15:36

2 respostas

0

Você pode tentar este awk :

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

O delimitador de entrada está definido como , . O comando imprime linhas contendo 2 campos com o segundo tendo a string correspondente.

    
por 06.06.2018 / 15:46
0

Os seguintes trabalhos:

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

Isso pula o primeiro campo e sua vírgula final, depois procura uma correspondência com Level1.2 ; o resultado é então filtrado ignorando todos os registros com um Level subseqüente (qualquer Level no primeiro campo não terá uma vírgula anterior).

Assumi que outro texto pode ser anexado a Level1.2 , desde que não contenha uma string Level . Se isso não for verdade, você pode usar o mais simples:

grep '^[^,]*,Level1\.2$' myfile.txt
    
por 06.06.2018 / 16:28

Tags