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
.Respostas:
Questão 1
Questão 2
fonte
venkat
e devenkat3
acordo com o OP solicitado na outra pergunta. Estou tentando descobrir se a chave depois_
está presente na minha$1
coluna.para a pergunta 1, você pode usar a opção
--only-delimited
(-s
) decut
fonte
Outra abordagem:
Questão 1
Isso será impresso apenas se
$2
estiver definido. É uma maneira mais curta de escrever:Questão 2
Não há nada a acrescentar que ainda não tenha sido abordado.
fonte
questão 1
Questão 2
fonte
venkat
evenkat3
como saída, como eles estão presentes$1
. No entanto, recebo todos os$1
valores conforme seu comando.$2
entrada que ocorreu$2
na 1ª coluna. Isto está certo?