onefish
onechicken
twofish
twochicken
twocows
threechicken
Что делать, если я хочу grep для строк, содержащих "два", но мне нужно только 2-го совпадения. Поэтому я хочу, чтобы результат был "двумя".
onefish
onechicken
twofish
twochicken
twocows
threechicken
Что делать, если я хочу grep для строк, содержащих "два", но мне нужно только 2-го совпадения. Поэтому я хочу, чтобы результат был "двумя".
попробуйте следующее:
awk '/two/{i++}i==2' file
с вашими данными:
kent$ echo "onefish
onechicken
twofish
twochicken
twocows
threechicken"|awk '/two/{i++}i==2'
twochicken
note: если ваш файл огромен, сделайте следующее:
awk '/two/{i++}i==2{print; exit}' file
grep -m2 "two" in-file.txt | tail -n1
Остановитесь после второго совпадения, затем произведите печать второй строки.
Если слово (здесь слово == два) повторяет несколько раз в одной строке, и вы хотите напечатать эту строку, используйте ниже:
word=two
n=2
line=`grep -m$n $word -o -n MyFile | sed -n $n's/:.*//p'`
awk 'FNR=='$line'{print; exit}' MyFile
например. Для ввода ниже:
onefish
onechicken
twotwofish
twochicken
twocows
threechicken
он напечатает twotwofish вместо twochicken.
Возможно, это не то, что хочет пользователь1787038, но добавил, чтобы ответить на мои собственные комментарии.
Следует отметить, что если строки threechicken и twocows были заменены, aka:
onefish
onechicken
twofish
twochicken
threechicken
twocows
то первый ответ Кента (awk '/two/{i++}i==2' file) даст выход:
twochicken
threechicken
потому что для увеличения счетчика требуется другое совпадение совпадения. Его последний ответ: awk '/two/{i++}i==2{print; exit}' file избегает этой проблемы.
grep и sed могут использоваться для фильтрации номера строки.
testfile:
onefish
onechicken
twofish
twochicken
threechicken
twocows
Получение нужной строки:
grep "two" testfile | sed -n 2p
prints "twochicken"
grep "two" testfile | sed -n 1p
prints "twofish"