Eu tenho o arquivo abc.txt que tem dados como -
abc pqr testing, xyz=a432j42jjk4, key=124
abc pqr testing, xyz=jkl234j54nn, key=567
abc pqr testing, xyz=2395hdshkw4, key=3232
abc pqr testing, xyz=abc424729hh, key=7676
abc pqr testing, xyz=70700ghgh99, key=12342
Estou pesquisando o texto "xyz" usando awk como -
awk -F"xyz=" '{print $2}' abc.txt | awk '{print $1}'
que me dá saída com novas linhas -
a432j42jjk4,
jkl234j54nn,
2395hdshkw4,
abc424729hh,
70700ghgh99,
Estou procurando um atalho ou truque no awk, onde posso obter a saída ao mesmo tempo, remover novas linhas dele.
Use GNU
grep
para isso:grep
imprime linhas que correspondem a uma determinada expressão regular. Com-o
definimos para imprimir apenas a parte correspondente da linha. Com-P
nosso regex é interpretado como um regex perl, o que nos dá mais opções.Nosso regex diz:
,
([^,]+
) e termine com,
xyz=
(?<=\bxyz=)
isso é chamado de lookbehind positivo ). Com o\b
temos certeza de não grep algo comobooxyz=
Usando padrão
awk
e supondo que você deseja procurarxyz=
especificamente no segundo campo delimitado por vírgulas.Alternativamente,
Isso trataria a entrada como consistindo de linhas com campos delimitados por vírgulas. O corpo real do
awk
código dividirá o segundo campo delimitado por vírgulas em subcampos em=
e, em seguida, imprimirá o segundo deles se o primeiro for exatamente a stringxyz
(incluindo o espaço inicial antes da vírgula).Linhas vazias seriam descartadas, pois
a[1]
não obteriam o valor desejado nessas linhas.Você gostaria de vírgulas extras no final de cada linha de saída, use
print a[2] ","
.