можно также слинковать заголовочный файл:
ln -S /lib/modules/$(uname -r)/build/include/linux/version.h /usr/include/linux/version.h
Не совсем тот формат, который вам нужен, но соответствует всем остальным требованиям:
awk '{print $1" "$3}' <inFile> | sort | uniq -c
В английском языке используйте awk для печати только первого и третьего столбцов, затем сортируйте, а затем uniq со счетчиком.
Учитывая Ввод , используйте cut
, sort
, uniq
иsed
:
cut -d ' ' -f1,3 Input |
sort | uniq -c |
sed 's/^ *//;s/^\([0-9]*\) \([^ ]*\)/\2 \1/'
Использование datamash
иsed
:
datamash -t ' ' -g1,3 -s countunique 2 < Input |
sed 's/\(.*\) \(.*\) \(.*\)/\1 \3 \2/'
Выход одного из:
A 1 -05:00
A 2 -06:00
A 1 -07:00
B 2 -05:00
C 1 -05:00
C 3 -06:00
$ awk '{ count[$1,$3]++ } END { for (i in count) { split(i, field, SUBSEP); printf("%s(%d)%s%s\n", field[1], count[i], OFS, field[2]) } }' file
A(1) -07:00
B(2) -05:00
A(2) -06:00
A(1) -05:00
C(3) -06:00
C(1) -05:00
Обратите внимание, что выходные данные могут быть не отсортированы. При необходимости пропустите его через sort
.
Код сохраняет подсчет того, сколько раз первое и третье поля ввода встречались вместе как пара, в массиве count
(с первым и третьим полями в качестве индекса ). В конце мы перебираем индексы массива, разбивая их на исходные первое и третье поля (как field[1]
и field[2]
соответственно )и выводим их вместе со счетчиком в нужном формате.
В альтернативном формате:
Если во входном файле используется один пробел для разделителя полей (, в противном случае используйте awk '{ print $1,$3 }'
вместо cut
):
$ cut -d ' ' -f 1,3 file | sort | uniq -c
1 A -05:00
2 A -06:00
1 A -07:00
2 B -05:00
1 C -05:00
3 C -06:00
Чтобы поменять местами два первых столбца:
$ cut -d ' ' -f 1,3 file | sort | uniq -c | awk '{ print $2, $1, $3 }'
A 1 -05:00
A 2 -06:00
A 1 -07:00
B 2 -05:00
C 1 -05:00
C 3 -06:00