Я пытался найти решение этого вопроса. Я хотел использовать 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
.Ответы:
Вопрос 1
Вопрос 2
источник
venkat
иvenkat3
согласно ОП, заданному в другом вопросе. Я пытаюсь найти, присутствует ли ключ после_
в моем$1
столбце.для вопроса 1 вы можете использовать опцию
--only-delimited
(-s
)cut
источник
Другой подход:
Вопрос 1
Это будет печатать, только если
$2
определено. Это более короткий способ записи:вопрос 2
Не нужно ничего добавлять, что еще не было решено.
источник
Вопрос 1
вопрос 2
источник
venkat
и вvenkat3
качестве вывода, как они присутствуют в$1
. Тем не менее, я получаю все$1
значения в соответствии с вашей командой.$2
запись, которая$2
произошла в 1-м столбце. Это правильно?