Сгруппированная совокупная утилита (как SQL GROUP BY)?

использовать find и tree команда, которая является находкой использования prune исключить каталоги поиска и использования tree -P для поиска шаблона.

Используйте переключатель чернослива, например, если Вы хотите исключить misc каталог просто добавляет a -path ./misc -prune -oк Вашей команде находки.

для, например.find . -path ./misc -prune -o -exec tree -P <pattern> {} \; или можно использовать -name "*.cpp" in find

поскольку, исключая нескольких использование каталогов

find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o

6
02.08.2013, 02:40
3 ответа

Я думаю, что нашел этот ответ в другом вопросе о StackOverflow, но я нашел "q" довольно полезный с этой целью: https://github.com/harelba/q.

Например, Ваша цель в качестве примера была бы достижима как этот:

$ q "select c2, sum(c3) from data group by c2"
u1 423404
u2 3948

И так как это использует sqlite в качестве бэкенда, можно использовать все виды функций sqlite для создания вычислений.

12
27.01.2020, 20:23
  • 1
    "q" является гением, большое спасибо за представление –  J.N. 07.02.2014, 07:51

С некоторыми ограничениями GNU Recutils может сделать это. Во-первых, это должен быть файл CSV, не TSV (Recutils, кажется, не нравятся файлы TSV), и нуждается в заголовке. Но затем я могу сделать:

csv2rec foo.csv |recsel -G user -p 'user,sum(size)' |rec2csv

Не уверенный, если это лучше или хуже, чем острота Perl или Awk.

1
27.01.2020, 20:23

Если однострочники awk не считаются, возможно, вам понравится следующая однострочная оболочка (bash / ksh):

sort -k2 data | ( while read c1 c2 c3; do if [ "$prev" = "$c2" ]; then
sum=$(expr $c3 + $sum); else if [ $prev ]; then echo $prev $sum; fi;
sum=$c3; prev=$c2; fi; done; echo $prev $sum)

Помимо sort и expr (для группировки и суммирования соответственно) интересным ингредиентом, используемым здесь, является оператор чтения внутри while. И круглые скобки, которые создают подпроцесс, необходимый для локализации переменных $ prev и $ sum .

1
27.01.2020, 20:23

Теги

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