Разбор данных из функции в POSIX - PullRequest
0 голосов
/ 16 февраля 2020

Я использую POSIX. У меня есть функция с именем get_data, которая возвращает:

4;Fix README;feature4;develop;URL5
2;Fix file3;feature2;develop;URL2
5;Fix README;feature2;develop;URL3
1;Fix file2;feature1;develop;URL1

Я хочу получить URL-адрес (последняя часть) последней функции2 (на основе первого индекса). В приведенном выше примере он вернет URL3, потому что у него есть feature2 в третьем поле и 5 > 2 в первом поле.

Первое, что я попробовал:

url=$(get_data | grep feature2)

Но мне не нравится это решение, потому что другие строки также могут содержать feature2 в других полях. Если бы это был Bash, я бы использовал BASH_REMATCH с регулярным выражением, но здесь я не уверен, каков наилучший и самый элегантный способ получить этот URL.

Можно ли получить какое-то предложение о том, как сделать это?

Ответы [ 2 ]

3 голосов
/ 16 февраля 2020

Использовать awk:

url=$(get_data | awk -F";" '$3 == "feature2" && $1 > idx {idx=$1; url=$5} END {print url}')

После разделения каждой строки на поля, ограниченные ;, сохраните пятое поле из строки, третье поле которой является требуемым объектом, если индекс больше чем тот, который вы последний раз сохранили. После проверки каждой строки выведите окончательное значение url.

0 голосов
/ 16 февраля 2020

Используя sort и awk, мы можем сделать

url=$(get_data | sort -t ";" -k 1nr,1nr file | awk -F";" '$3 == "feature2"{print $5;exit}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...