2015-01-23 2 views
0
Identifiable: fasdf/=egbalid=/more.garble/XY=foo.bar.baz 

У меня есть линия, которая может быть идентифицирована однозначно с помощью /Identifiable/. Я хотел бы иметь значение XY (в данном случае foo.bar.baz). Как я могу получить это в awk?awk: получение определенного значения

+2

является 'XY =' всегда на ан d линии? Покажите более широкий пример ввода, чтобы решения могли быть более точными. – fedorqui

+1

@fedorqui ** Мы думаем о '[^ =] * $' :) – Kent

+0

@fedorqui Я думаю, что это происходит в 95% случаев. Это достаточно хорошо. – user857990

ответ

1

Вы можете использовать grep для этой цели.

grep -oP '^(?=.*\bIdentifiable\b).*\bXY=\K[\w.]+' file 

Пример:

$ echo 'Identifiable: fasdf/=egbalid=/more.garble/XY=foo.bar.baz' | grep -oP '^(?=.*\bIdentifiable\b).*\bXY=\K[\w.]+' 
foo.bar.baz 
0

В предположении, что значение XY всегда в конце строки (это всегда трудно угадать, когда только одна строка ввода образца размещена):

$ awk -F= '/Identifiable/{print $NF}' file 
foo.bar.baz 
0

Вот один из способов:

echo "Identifiable: fasdf/=egbalid=/more.garble/XY=foo.bar.baz" | awk -F"XY=" '{print $2}' 
foo.bar.baz 
+0

Это почти сработало, я должен использовать 'awk -F" "' по крайней мере уже использующий (весь оператор немного дольше). Если я использую awk -F «XY = |», он больше не работает. Я всегда получаю пустую строку. Даже на $ 1. Это должно быть «$ 3» с этими двумя FS. Любая идея о том, почему это произойдет? – user857990

+0

Поскольку вы указываете '-F" "и' -F "XY = |" ', у вас есть пробел или' '' в вашем тексте. Пожалуйста, заполните данные, и я постараюсь вам помочь. – Jotne