remova linhas em branco na exibição do awk

remova linhas em branco na exibição do awk

Eu estava tentando descobrir uma solução paraessepergunta. 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

Usei awko 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 venkate venkat3na saída?

Se eu usar printfem vez de printno meu awk, recebo venkatvenkat3como 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 $1coluna?

Eu queria alcançar algo como,

awk -F "_" '$2==1{print $1}' file

EDITAR

Não percebi a awksoluçã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 $2estiver 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-scut

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

informação relacionada