Теперь Ansible отвечает на этот вопрос, добавляя параметр umask
к модулям, подобным упомянутым, которые создают файлы без определенного режима.
Я не вижу большого недостатка, если вы добавите этот более явный параметр там, где это необходимо. Может быть, просто небольшое раздражение при чтении роли.
Замечу, что модуль copy
не реализует umask
. Вы можете указать режим
, просто у него немного другая семантика. Если бы вы могли указать umask
, а файл уже существовал (независимо от содержимого), то его режим не был бы изменен. (В роли, над которой я работаю, думаю, полезно, что модуль копирования заставил меня задуматься об этом).
Замечу, что в исходном сообщении упоминаются разрешения на нарушение протокола для доступной установки в /usr/lib/python2.6/site-packages
. Конечно, это также будет проблемой при запуске pip
вручную. Это звучит как дефект в pip ... но в отличие от пакетов ОС, пакеты pip также могут быть установлены внутри virtualenv
, поэтому для pip
гораздо сложнее определить намерение пользователя .Возможно, это скорее пример потенциально непредвиденной проблемы из-за использования ограничительной маски umask.
Кэш данных GNU создан для такого рода задач - например,
datamash -WH -g 1,2 sum 3,4 count 4
или более подробно
datamash --whitespace --headers \
groupby Bitrate,ASNUM sum TotalBytes,DownloadTime count DownloadTime
(не имеет значения, какой из несгруппированные поля, указанные вами для счетчика
).
Ваш случай немного усложняется пустыми строками, но вы можете просто вырезать их перед и снова добавить после, например,
sed '/^$/d' file | datamash -WH -g 1,2 sum 3,4 count 4 | column -t | sed G
GroupBy(Bitrate) GroupBy(ASNUM) sum(TotalBytes) sum(DownloadTime) count(DownloadTime)
280000 2856 122882 26 2
1179968 2856 309430 11 1
1179968 4156 309200 15 1
4864960 2856 3111500 609 3
Вот решение с использованием awk:
awk -F " " '
NR==1 {print; next}
NF {a[$1" "$2]+=$3; b[$1" "$2]+=$4; c[$1" "$2]++}
END {for(i in a)print i, a[i], b[i], c[i]}
' file
--> inputFile должен находиться в каталоге, в котором выполняется команда
--> -F " " считает разделителем один пробел
--> NR==1{print;next} печатает заголовки на вывод и пропускает его
--> массив a[$1""$2] считает группировку по значению 1-го столбца и 2-го столбца. То же самое для массивов b и c.
--> Оператор += суммирует нужный столбец на основе группировки по массиву
--> Оператор ++, используемый с массивом c, сохраняет подсчет по группировке по
--> Последний цикл "for" используется для печати результатов на вывод