Eu estava tentando descobrir uma solução para esta pergunta. Eu queria usar awk
para a solução.
Meu arquivo de entrada é algo como abaixo.
-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4
Eu usei o awk
comando para extrair os segundos valores depois _
como abaixo.
awk -F "_" '{print $2}' file
No entanto, embora o comando acima imprima os valores corretos, estou recebendo linhas em branco na minha saída. Eu tenho 2 perguntas.
Questão 1
Como posso remover as linhas em branco na saída para obter apenas venkat
e venkat3
na saída?
Se eu usar em printf
vez de print
no meu awk
, recebo venkatvenkat3
o resultado que não é o que eu queria alcançar. Eu quero a saída como,
venkat
venkat3
Questão 2
Usando esses valores como uma matriz associativa ou algo assim, como posso descobrir se os valores realmente ocorrem na $1
coluna?
Eu queria alcançar algo como,
awk -F "_" '$2==1{print $1}' file
EDITAR
Não notei a awk
solução de Stephane. Está fazendo a mesma coisa que eu mencionei?
awk
não está fazendo a mesma coisa. Sua abordagem assume que uma palavra só pode estar contida em outra se for separada por_
. Embora isso seja verdade no exemplo do OP, todas as respostas postadas também lidam com casos comodoglion
e não apenasdog_lion
.