onefish
onechicken
twofish
twochicken
twocows
threechicken
Co jeśli chcę grep dla linii zawierających "dwa", ale chcę tylko drugiego dopasowania. Tak więc chcę wyniku "twochicken".Wyświetl tylko n-te dopasowanie grep
onefish
onechicken
twofish
twochicken
twocows
threechicken
Co jeśli chcę grep dla linii zawierających "dwa", ale chcę tylko drugiego dopasowania. Tak więc chcę wyniku "twochicken".Wyświetl tylko n-te dopasowanie grep
spróbuj tego:
awk '/two/{i++}i==2' file
z danymi:
kent$ echo "onefish
onechicken
twofish
twochicken
twocows
threechicken"|awk '/two/{i++}i==2'
twochicken
nocie: jeśli plik jest ogromny, to zrobić:
awk '/two/{i++}i==2{print; exit}' file
grep -m2 "two" in-file.txt | tail -n1
Zatrzymaj się po drugim dopasowaniu, a następnie wydrukuj drugą linię.
to nie robi dokładnie tego, co jest oczekiwane. jeśli jest więcej dopasowań niż dwa, wyświetli wiele linii ... – poncha
Ogon powinien brzmieć: 'tail -n1'. – Thor
@poncha: naprawdę? Grep -m2 zapewnia, że są tylko dwa dopasowania. Mimo wszystko zmieniłem to, choć wydaje mi się, że było OK. –
Jeśli słowo (tutaj słowo == dwa) powtarza wiele razy w jednym wierszu, & chcesz wydrukować t tej linii, użyj poniżej:
word=two
n=2
line=`grep -m$n $word -o -n MyFile | sed -n $n's/:.*//p'`
awk 'FNR=='$line'{print; exit}' MyFile
np. Dla poniżej wejścia:
onefish
onechicken
twotwofish
twochicken
twocows
threechicken
zostanie wydrukowana twotwofish
zamiast twochicken
.
To może nie być to, czego chce użytkownik1787038, ale dodane, aby odpowiedzieć na mój komentarz.
'-m $ n' w linii grep jest tylko dla pewnej optymalizacji, nie jest potrzebne do funkcjonalności. – anishsane
Należy zauważyć, że jeśli threechicken
i twocows
linie zostały zamienione aka:
onefish
onechicken
twofish
twochicken
threechicken
twocows
czym pierwsza reakcja Kent (awk '/two/{i++}i==2' file
) dawałoby wyjściowe:
twochicken
threechicken
ponieważ bierze udział wystąpienie meczu, aby zwiększyć licznik. Jego ostatnia odpowiedź: awk '/two/{i++}i==2{print; exit}' file
pozwala uniknąć tego problemu.
druga opcja jest lepsza, niezależnie od rozmiaru pliku, nie? – poncha
@poncha, numer linii – Kent
co masz na myśli przez "numer linii"? Miałem na myśli, że dodanie '{print; exit} 'byłoby dobrym pomysłem dla każdego rozmiaru wejściowego ... oh. to była właściwie opcja # 3;) źle policzyłem))) – poncha