RegEx - Как извлечь вторые соответствия с помощью grep

Как извлечь вторые числа в этом тексте с помощью grep, управляют в человечности.

имя файла: Results.html? owner=12345

14219,98.2,31-s,19225
39219,92.7,31-s,29225

ouput требовал:

12345:98.2
12345:92.7

Спасибо

0
задан 12 March 2019 в 15:52

2 ответа

С GNU grep, можно переключиться на режим PCRE, где можно использовать lookarounds для соответствия числу, окруженному запятыми:

$ grep -HPo '(?<=,)[0-9.]*(?=,)' file
file:98.2
file:92.7

OTOH, если Ваши данные разграничены запятой более оптимальный вариант, мог бы быть Awk:

$ awk -F, '{print FILENAME ":" $2}' file
file:98.2
file:92.7

или эквивалентно в жемчуге perl -F, -nlE '{say "$ARGV:$F[1]"}' file


Для разделения имени файла в Awk, можно использовать

$ awk -F, '{split(FILENAME,a,/=/); print a[2] ":" $2}' Results.html\?owner\=12345 
12345:98.2
12345:92.7

или (немного более эффективно) если у Вас есть GNU Awk

gawk -F, 'BEGINFILE{split(FILENAME,a,/=/)} {print a[2] ":" $2}' Results.html\?owner\=12345
2
ответ дан 26 October 2019 в 01:29

Согласно этому потоку, нет правильного способа достигнуть того использования RegEx и grep.

В Вашем случае можно получить желаемый второй столбец входных данных Вы если, с помощью awk или sed. Использование в качестве примера awk представлен рев:

#assuming test.dat contains your data
awk -F"," '{ print $2 }'

#assuming you want to read data from stdout
echo "14219,98.2,31-s,19225" | awk -F"," '{ print $2 }'
0
ответ дан 26 October 2019 в 01:29

Другие вопросы по тегам:

Похожие вопросы: