У меня есть следующий Баш код с помощью поглазеть GSUB:Подсчитать количество замен GNU AWK gensub
replacedCount=$(gawk -v FILE_TMP="$FILE_TMP" -v OLD="$OLD" -v NEW="$NEW" '{ num += gsub(OLD, NEW); print $0 > FILE_TMP; } END { print num }' "$FILE")
Он заменяет все экземпляры только новыми и выводит результаты в FILE_TMP - количество замен ловится в переменной bash.
Можно ли достичь тех же результатов, используя gawk gensub?
- $ FILE - 182 строки длиной.
- Есть 8 вхождения $ OLD, которые должны быть заменены на $ NEW
Я пытался несколько способов, в большинстве случаев результаты равны 182, как я предполагаю, что подсчет числа вхождений $ 0.
Ближайший я получил это:
replacedCount=$(gawk -v FILE_TMP="$FILE_TMP" -v OLD="$OLD" -v NEW="$NEW" '{ num[$0=gensub(OLD, NEW, "G")]++; print $0 > FILE_TMP; } END { for (i in num) print num[i] }' "$FILE")
Что делает вывод FILE_TMP правильно. Однако replacedCount является:
replacedCount='8
1
1
1
1
1
1
8
1
8
8
1
1
1
8
1
1
1
1
1
1
1
1
8
8
1
1
1
8
1
1
8
1
1
1
1
1
1
1
1
8
8
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
8
1
8
1
1
1
8
1
1
8
8
1'
Учитывая, что' gensub' не возвращает эту информацию, я не вижу, как вы могли бы без подсчета совпадений каким-либо другим способом. –
Я не понимаю, почему вы хотите 'gsub()' поведение в 'gensub()', если он отлично работает с первым:) – fedorqui
расскажите нам, почему вы должны использовать 'gensub()' что еще вы хотите достичь ? Он пахнет проблемой X, Y – Kent