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.
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
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