Использование GAWK для суммирования определенных чисел построчно

По умолчанию grep использует Базовые регулярные выражения (BRE), которые не поддерживают {N}. Если он работает в командной строке, то, скорее всего, grep имеет псевдоним grep -E или grep -P. Вы можете проверить, выполнив

alias | grep grep

Псевдонимы не включены в сценарии. Как объясняется в man bash:

Aliases are not expanded when the shell is not interactive, unless  the
expand_aliases  shell option is set using shopt.

Таким образом, в неинтерактивной оболочке, которую вы получаете при запуске скрипта, псевдонимы не будут работать. У вас есть два варианта: либо включить псевдонимы явно в вашем скрипте, а затем использовать источник ~/. bashrc файл, чтобы получить определения псевдонимов (кстати, не нужно экранировать , ):

#!/bin/bash
shopt -s expand_aliases
source ~/.bashrc
grep -o ',[a-z][a-z0-9]{1,7}' source.txt > test.txt

Или, что гораздо проще, использовать grep -E в самом скрипте:

#!/bin/bash
grep -Eo ',[a-z][a-z0-9]{1,7}' source.txt > test.txt

Возможно, вы также захотите рассмотреть инструменты вроде awk которые предназначены для работы с данными, разделенными полями. Есть шанс, что они значительно упростят вам жизнь.

1
31.01.2019, 19:15
1 ответ
$ awk '{ print $0, "("$2"-"$8") + ("$4"-"$10")"}' inputfile
X 2.63766751981802 Y 1.68326762144808 Z 0 XX 2.63577810877244 YY 1.67475013544567 ZZ 0 (2.63766751981802-2.63577810877244) + (1.68326762144808-1.67475013544567)
0
28.01.2020, 00:37

Теги

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