Простейшая команда для печати уникальных значений некоторых данных столбца с подсчетом повторяющихся значений

можно также слинковать заголовочный файл:

ln -S /lib/modules/$(uname -r)/build/include/linux/version.h /usr/include/linux/version.h
0
11.04.2018, 22:25
3 ответа

Не совсем тот формат, который вам нужен, но соответствует всем остальным требованиям:

awk '{print $1" "$3}' <inFile> | sort | uniq -c

В английском языке используйте awk для печати только первого и третьего столбцов, затем сортируйте, а затем uniq со счетчиком.

3
28.01.2020, 02:13
  1. Учитывая Ввод , используйте cut, sort, uniqиsed:

    cut -d ' ' -f1,3 Input | 
    sort | uniq -c | 
    sed 's/^ *//;s/^\([0-9]*\) \([^ ]*\)/\2 \1/'
    
  2. Использование 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
2
28.01.2020, 02:13
$ 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
3
28.01.2020, 02:13

Теги

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