Eu estava tentando descobrir uma solução paraessepergunta. 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
Usei awk
o comando para extrair os segundos valores _
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 printf
em vez de print
no meu awk
, recebo venkatvenkat3
como resultado o que não queria alcançar. Eu quero a saída como,
venkat
venkat3
Questão 2
Usando esses valores comomatriz associativaou algo assim, como posso saber se os valores realmente ocorrem na $1
coluna?
Eu queria alcançar algo como,
awk -F "_" '$2==1{print $1}' file
EDITAR
Não percebi a awk
solução de Stephane. Está fazendo a mesma coisa que mencionei?
Responder1
Outra abordagem:
Questão 1
awk -F_ '$2{print $2}' file
Isso só será impresso se $2
estiver definido. É uma forma mais curta de escrever:
awk -F_ '{if($2){print $2}}' file
Questão 2
Não tenha nada a acrescentar que já não tenha sido abordado.
Responder2
Questão 1
$ awk -F _ 'NF > 1 {print $2}' file
venkat
venkat3
Questão 2
$ awk -F _ '
NR == FNR {a[$1];next}
($2 in a) {print $2}
' file file
venkat
venkat3
Responder3
para a pergunta 1, você pode usar a opção --only-delimited
( ) de-s
cut
cut -s -f2 -d'_' file
venkat
venkat3
Responder4
questão 1
awk -F "_" '/_/ {print $2}' file
Questão 2
awk -F "_" '{values[$1]=1;}; END {for (val in values) print val;}' file