Eu estava tentando descobrir uma solução para esta pergunta. Eu queria usar awkpara 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 awkcomando 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 venkate venkat3na saída?
Se eu usar em printfvez de printno meu awk, recebo venkatvenkat3o 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 $1coluna?
Eu queria alcançar algo como,
awk -F "_" '$2==1{print $1}' file
EDITAR
Não notei a awksolução de Stephane. Está fazendo a mesma coisa que eu mencionei?
awknã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 comodoglione não apenasdog_lion.