Вот coreutils и dc альтернатива:
<Input.txt tail -n +2 | while read; do <<< "$REPLY 10000 /p" | dc; done | sort -n | uniq -c \
| while read cnt rng; do
printf "%-15s %-15s\n" \
$(<<< "$rng 10000 *p" | dc)-$(<<< "$rng 1 + 10000 *p" | dc) $cnt
done > Output.txt
Output.txt:
0-10000 2
10000-20000 3
20000-30000 1
30000-40000 2
По сути, это часть стратегии по смягчению некоторых проблем безопасности, позволяя пользователям простым способом сотрудничать с меньшим количеством проблем с разрешениями.
Системы Linux имеют так называемую маску umask, которая диктует разрешения на файлы и каталоги , назначенные при создании. По умолчанию эта маска обычно равна 022, которая создает файлы с 644 разрешениями (owner read/write, group read-only, другие только для чтения) и создает ограничительные настройки, обычно применяемые к новым файлам и каталогам.
К сожалению, отсутствие права на чтение/запись для группы означает, что вы должны полагаться на человека, который создал файл, чтобы предоставить группе правильные права на его редактирование (и пользователи не всегда уверены в этом).
Часть пути решения этой проблемы заключается в установке маски 002, в результате чего получаются файлы с 664 разрешениями (owner read/write, group read/write, другие - только для чтения). Но это может иметь нежелательные побочные эффекты (например, члены команды могут редактировать личные файлы друг друга в зависимости от групп по умолчанию). Таким образом, каждый новый пользователь становится частью группы по умолчанию с одним пользователем (эмулируя схему 022/644).
Подробнее о том, как это помогает сотрудничеству: https://security.ias.edu/how-and-why-user-private-groups-unix