Próbowałem znaleźć rozwiązanie tego pytania. Chciałem użyć awk
rozwiązania.
Mój plik wejściowy jest podobny do poniższego.
-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4
Użyłem awk
polecenia, aby wyodrębnić drugie wartości po, _
jak poniżej.
awk -F "_" '{print $2}' file
Jednak pomimo tego, że powyższe polecenie wypisuje prawidłowe wartości, otrzymuję puste wiersze na moim wydruku. Mam 2 pytania
Pytanie 1
Jak mogę usunąć puste linie na wyjściu, aby uzyskać tylko venkat
i venkat3
na wyjściu?
Jeśli użyję printf
zamiast print
w moim awk
, otrzymam venkatvenkat3
jako wynik, czego nie chciałem osiągnąć. Chcę wynik jak
venkat
venkat3
pytanie 2
Używając tych wartości jako tablicy asocjacyjnej lub czegoś takiego, jak mogę sprawdzić, czy wartości faktycznie występują w $1
kolumnie?
Chciałem osiągnąć coś takiego,
awk -F "_" '$2==1{print $1}' file
EDYTOWAĆ
Nie zauważyłem awk
rozwiązania Stephane. Czy robi to samo, o czym wspomniałem?
awk
nie robi tego samego. Twoje podejście zakłada, że słowo może być zawarte w innym, tylko jeśli jest oddzielone_
. Chociaż dotyczy to przykładu PO, wszystkie opublikowane odpowiedzi dotyczą również przypadków podobnychdoglion
i nie tylkodog_lion
.Odpowiedzi:
Pytanie 1
Pytanie 2
źródło
venkat
ivenkat3
zgodnie z OP zadanym w drugim pytaniu. Próbuję sprawdzić, czy klucz po_
jest obecny w mojej$1
kolumnie.w przypadku pytania 1 można użyć opcji
--only-delimited
(-s
) zcut
źródło
Inne podejście:
Pytanie 1
Zostanie wydrukowany tylko, jeśli
$2
jest zdefiniowany. Jest to krótszy sposób pisania:pytanie 2
Nie dodawaj niczego, co nie zostało jeszcze rozwiązane.
źródło
Pytanie 1
pytanie 2
źródło
venkat
ivenkat3
tyle, ile są obecne$1
. Jednak otrzymuję wszystkie$1
wartości zgodnie z twoim poleceniem.$2
wpis, który$2
występuje w 1. kolumnie. Czy to jest poprawne?