Я пытался найти решение этого вопроса. Я хотел использовать 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
решение Стефана. Это делает то же самое, что я упомянул?
awk
не делает то же самое. Ваш подход предполагает, что слово может содержаться в другом, только если оно разделено_
. Хотя это верно для примера ОП, все опубликованные ответы также касаются таких случаев, какdoglion
и не толькоdog_lion
.