Если вы используете set -a
либо в своем .bashrc
, либо в самом файле функций, он пометит все функции для экспорта.
-a
Each variable or function that is created or modified is given the export attribute and marked for export to the environment of subsequent commands.
Это может привести к нежелательным результатам, если вы устанавливаете переменные, которые не хотите экспортировать, но вы можете добавить что-то подобное в.bashrc
:
set -a
source ~/my_funcs
set +a
Вот один из способов. Отсортируйте файл, затем получите количество с помощью uniq -c
, затем используйте awk
, чтобы изменить порядок полей.
$ sort file.txt | uniq -c | awk '{ print $2,$3,$1 }'
1 1 3
1 2 2
2 1 2
3 1 1
4 1 1
5 2 1
$
И второй способ, использующий чистый awk
.
$ awk '{ x[$0]++ } END { for(a in x) { print a,x[a] } }' file.txt
1 1 3
1 2 2
4 1 1
2 1 2
5 2 1
3 1 1
$
Третий способ, perl
. Немного хакерский/длинный, так что ждите, пока кто-нибудь продемонстрирует более элегантный подход.
$ perl -nle '$a{$_}++;END{for(keys %a) { print $_," ",$a{$_} } }' <file.txt
3 1 1
1 2 2
5 2 1
1 1 3
2 1 2
4 1 1
$