Извлечь одно слово после определенного слова в той же строке

Как я могу извлечь слово, которое идет после определенного слова в Linux (csh)? Точнее, у меня есть файл, который имеет одну строку, которая выглядит так:

[some useless data] --pe_cnt 100 --rd_cnt 1000 [some more data]

Я хочу извлечь номер 100 который после --pe_cnt слово. Я не могу использовать sed, поскольку это работает, только если вы хотите извлечь всю строку. Может быть, я могу использовать awk?

Кроме того, у меня есть несколько файлов, которые имеют разные значения вместо 100 поэтому мне нужно что-то, что извлекает значение, но не зависит от значения.

4 ответа

Решение

С awk:

awk '{for(i=1;i<=NF;i++) if ($i=="--pe_cnt") print $(i+1)}' inputFile

В основном цикл по каждому слову строки. Когда вы найдете первое, что ищете, возьмите следующее слово и напечатайте его.

С grep:

grep -oP "(?<=--pe_cnt )[^ ]+" inputFile

Вы можете использовать Sed. Просто создайте группу, которую хотите сопоставить, и замените всю строку на группу:

sed -n 's/^.*pe_cnt\s\+\([0-9]\+\).*$/\1/p' file

Если между пробелами есть символ --pe_cnt а также 100, вы можете использовать утверждения типа "смотреть вперед" и "смотреть назад"

grep -oP '(?<=--pe_cnt\s)\d+(?=\s+--rd_cnt)'

Это может быть самая короткая версия:

      grep -oP 'pe_cnt \K[^ ]+' file
Другие вопросы по тегам