2014-11-22 3 views
1

Как получить некоторые значения из этой строки?Извлечь фрагменты сложной строки

Использование функции abs с использованием проблемы типа ps Путь найден с общей стоимостью 8 в 0.0 секунд Поисковые узлы расширены: 183 победных! Счет: 502 Средняя оценка: 502,0 результатов: 502,0 Win Оценить: 1/1 (1,00) Запись: Win

мне нужны значения для общей стоимости (8) и узлов расширенной (183) в этом примере. (Возможно, в другом исполнении у меня есть 47.)

Я пробовал ${str:119:1}, но иногда значение меняется на 10 или 100, и я получаю только одну цифру. Мне нужна полная ценность.

+0

Если предположить, что вы будете делать это более чем один раз, вы можете подумать о получении более чистого вывода, что упростило бы извлечение данных или переключение на вывод, который предназначен для анализа или запроса, т. е. json или xml. Или написать препроцессор, который удаляет ненужные слова, то есть победители! 1/1 или 1,0. И конвертировать фраз в 2 слова в 1 слово, то есть AvgScore, WinRate, SearchNodes (или nodesExpanded). Удачи! – shellter

ответ

0

awk может разбивать строки на «слова» и печатать их. Пример:

$ awk '{ print $3 }' <<< 'using function abs using [...]' 
abs 
2

grep может помочь вам

пример

$ grep -oP '(nodes expanded:|total cost of) [0-9]+' inputFile 
total cost of 8 
nodes expanded: 183 

ИЛИ

если вы не то, что строка затем

$ grep -oP '(nodes expanded:|total cost of) \K[0-9]+' input 
8 
183 
0

Чтобы извлечь эти цифры:

$ echo "$str" | awk -v RS="" '{print $14,$21}' 
8 183 

Если вы хотите, чтобы захватить эти значения, как удобно Названные переменные оболочки:

$ cost=$(echo "$str" | awk -v RS="" '{print $14}') 
$ expanded=$(echo "$str" | awk -v RS="" '{print $21}') 

Чтобы показать, что выше работал:

$ echo cost=$cost expanded=$expanded 
cost=8 expanded=183 
Смежные вопросы