удалить пустые строки в awk display

удалить пустые строки в awk display

Я пытался найти решение дляэтотвопрос. Я хотел использовать awkдля решения.

Мой входной файл выглядит примерно так:

-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4

Я использовал awkкоманду для извлечения вторых значений после, _как показано ниже.

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

Однако, хотя указанная выше команда выводит правильные значения, я получаю пустые строки в выводе. У меня есть 2 вопроса.

Вопрос 1

Как удалить пустые строки в выводе, чтобы в выводе остались только venkatи ?venkat3

Если я использую printfвместо printв моем awk, я получаю venkatvenkat3как вывод, который не является тем, что я хотел получить. Я хочу вывод как,

venkat
venkat3

вопрос 2

Используя эти значения какассоциативный массивили что-то в этом роде, как мне узнать, действительно ли значения встречаются в $1столбце?

Я хотел добиться чего-то вроде:

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

РЕДАКТИРОВАТЬ

Я не заметил awkрешения Стефана. Оно делает то же самое, что я упомянул?

решение1

Другой подход:

Вопрос 1

awk -F_ '$2{print $2}' file

Это будет напечатано только если $2определено. Это более короткий способ записи:

awk -F_ '{if($2){print $2}}' file

вопрос 2

Мне нечего добавить, кроме того, что уже было рассмотрено.

решение2

Вопрос 1

$ awk -F _ 'NF > 1 {print $2}' file
venkat
venkat3

Вопрос 2

$ awk -F _ '
    NR == FNR {a[$1];next}
    ($2 in a) {print $2}
' file file
venkat
venkat3

решение3

для вопроса 1 вы можете использовать опцию --only-delimited( -s)cut

cut -s -f2 -d'_' file
venkat
venkat3

решение4

Вопрос 1

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

вопрос 2

awk -F "_" '{values[$1]=1;}; END {for (val in values) print val;}' file

Связанный контент