
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 Level
no primeiro campo não terá uma vírgula anterior).
Presumi que outro texto pode ser anexado Level1.2
, desde que não contenha uma Level
string. Se isso não for verdade, você pode usar o mais simples:
grep '^[^,]*,Level1\.2$' myfile.txt