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