использование awk для поиска и замены строки расчетом на основе строки

С ksh, bash -O extglobили zsh -o kshglobс использованием некоторых двойных -отрицаний (здесь предполагается, что вы также хотите исключить файлы с 3 или более символами подчеркивания):

printf '%s\n' !(!(*_*_*)|*_*_*_*|*.*)

С zsh -o extendedglobи его ~, кроме оператора :

printf '%s\n' *_*_*~(*_*_*_*|*.*)

или используя родной оператор отрицания zsh:

printf '%s\n' ^(^*_*_*|*_*_*_*|*.*)

Если вам по-прежнему нужны файлы с более чем двумя символами подчеркивания, это просто !(!(*_*_*)|*.*), *_*_*~*.*или ^(^*_*_*|*.*)вместо вышеуказанного соответственно.

Другими подходами могут быть!(*[._]*)_!(*[._]*)_!(*[._]*)(заменить [_.]на ., чтобы разрешить 3 или более символов подчеркивания ).

0
21.08.2020, 17:41
1 ответ

Следующая команда awkдолжна выполнять:

awk 'sub(/g$/,"",$2) {$2=1000000*$2}1' input.txt

Это проверит, заканчивается ли второй столбец($2)в нижнем -регистре g, пытаясь заменить завершающий gсловом «ничего» (, тем самым сократив поле до числового значения. ). Если это удается (, т. е. возвращаемое значение sub(), которое является количеством выполненных успешных замен, не равно -нулю ), значение поля умножается на 1000000.

Замыкающий 1инструктирует awkраспечатать все строки, включая любые сделанные модификации.

4
18.03.2021, 23:11

Теги

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