Как изменить/организовать данные в файле с помощью Awk

РЕДАКТИРОВАТЬ: То, что вычеркнуто, является временным исправлением. Проблема возникла снова вскоре после этого. Перейдя в «Настройки»> «Основные»> «Разные параметры» и отключив «Включить поддержку индикаторов», я решил проблему. Я просмотрел журнал ~ / .cinnamon / glass.log и обнаружил, что один из индикаторов (клиент owncloud) перезапускается каждые 30 секунд, что вызывает проблему.

Хорошо, я решил проблему.

Переименуйте ~ / .cinnamon в ~ / .cinnamon-bak .

По крайней мере, в моем случае моя версия ~ / .cinnamon существует уже давно. Удаление этой папки (что привело к ее воссозданию) устранило проблему, и больше никаких всплесков задержки каждые 30 секунд!

3
09.03.2019, 16:53
2 ответа

Я просто поставил свое решение с помощью sed , даже если его просят специально для AWK, я считаю это решение более компактным и прямым:

GNU Sed (проверено в CentOS):

sed -n '1!p' addresses.csv | sed -r 's!^([0-9]*(\sbis|\ster)?),?(.*)$!\1,\3!g;s!(.*)([^,])(,[0-9]*)$!\1\2,\3!g'

OS-X / BSD Sed

sed -n '1!p' addresses.csv | sed -E 's!^([0-9]*( bis| ter)?),?(.*)$!\1,\3!g;s!(.*)([^,])(,[0-9]*)$!\1\2,\3!g'

Первая команда sed берет все строки, кроме первой (заголовок).

Для второго sed я использую замены:

^                : Starting text.
[0-9]*           : all numbers (0, 1, ... 99, 999, 99999999 and so on) 
( bis| ter)?     : optionally followed by " bis" or " ter" (notice the space before); group 2
,?           : optionally followed by a comma
(.*)$            : the rest of the string until the end ($) (group 3)

!\1,\3           : replaced by first group (number + extension) - comma - third group 

Обратите внимание, что вторая группа - это скобки для 'bis' и 'ter', а первая группа - это ([0-9 ] * (bis | ter) {0,1})

Вторая замена предназначена для нормализации запятых (если она не заканчивается ,, \ d , мы добавляем дополнительную запятую.

1
27.01.2020, 21:26

Замечание @ruffp совершенно верно. Однако, в дополнение к этой проблеме можно сказать:

awk -F, '!$2 { sub(/^([0-9]*)/, "&,"); sub(/,,/, ","); } 1'  addresses
1
27.01.2020, 21:26

Теги

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