Como pesquisar uma string começando na segunda coluna

Como pesquisar uma string começando na segunda coluna

Eu tenho um arquivo que contém strings separadas por vírgula. As strings podem conter pontos (ou seja, não apenas caracteres alfanuméricos). Isto é 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

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 sempre com .com, portanto não devo considerar a aparência da primeira coluna)

Eu preciso dos sites queAPENAScontém uma string específica. Neste exemplo,Level1.2 exclusivamente(sem Nível1.1 nem Nível1.0 não Nível3antes ou depois). 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 começam na segunda coluna (não quero um resultado de pesquisa que encontre um padrão correspondente no nome do site).

Portanto, se estou procurando por Level1.2, o novo arquivo deverá conter:

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

Mas 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, ele não deverá ser contabilizado, pois não me importo com a primeira coluna.

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

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

Responder1

Você pode tentar isso 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.

Responder2

Os seguintes trabalhos:

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

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

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

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

informação relacionada