Извлечь одно слово после определенного слова в той же строке
Как я могу извлечь слово, которое идет после определенного слова в 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