Как я могу рассчитать, сколько повторных чисел в файле и затем организуют их повторениями?

У меня есть файл, которому нужно организованный много повторений, мой файл имеет 6 строк и 3 120 строк, у каждого участника есть 1 или 2 цифры, общие 18 720 чисел с одной или 2 цифрами.

Я хотел бы рассчитать, сколько 1, сколько 2, сколько 3 так на том, сколько 45 я имею в своем файле и произвожу organanize число, о котором наиболее сообщают, к менее повторному. Пример:

5   7   13  25  26  44
12  21  26  28  32  44
10  20  22  26  40  44
13  18  19  20  22  23
9   15  17  19  22  43
10  19  28  29  37  45
2   8   12  13  22  35
3   23  24  26  38  39
3   14  19  20  33  43
2   3   8   35  36  43
2   8   25  29  37  43
3   24  27  29  38  44
5   20  23  32  33  40
11  17  22  26  33  36
1   6   31  32  39  44
4   22  27  31  36  43
3   6   18  22  35  44
11  13  24  28  32  33
17  22  27  29  42  44
8   9   16  23  29  44
13  19  20  33  37  40
18  21  29  31  34  44
14  15  20  31  32  41
6   32  33  40  41  43
11  17  18  31  43  44
1   9   10  22  24  34
6   8   9   35  37  38
14  18  21  36  40  43
11  16  17  32  34  38
1   5   14  22  23  24
5   19  21  22  32  45
12  17  20  22  32  44
9   27  32  38  42  44
4   12  16  26  42  45
6   7   8   16  39  42
5   6   13  18  27  28

Вывод:

большая часть repeted сначала с количеством repetion

5=30 Пять reapeted 30 раз

4=28 Четыре reapeted 28 раз

.........

.........

.........

35=0 Тридцать пять повторился 0 раз

Я пробую это, но не работает, и я не опытен для изменения кода

$ tr -s " " "\n" | sort | uniq -c | sort -n r | awk '{print $2 " = " $1}'
$ awk -v RS='\\s+' '{cnt[$0]++} END{PROCINFO["sorted_in"]="@val_num_desc"; for (i in cnt) print i" = "cnt[i]}' file
$ tr -s ' ' '\n' <file | sort | uniq -c | sort -nr | awk '{print $2 " = " $1}'
$ tr -s ' ' '\n' <nums | sort | uniq -c | sort -k1,1nr -k2n | awk '{print $2 " = " $1}'
$ awk -v RS=" +|\n" '{a[$1]++}END{for(x in a)printf "%d = %d\n",x,a[x]}' file
$ awk -v RS=" +|\n" '{a[$1]++}END{for(x in a)printf "%d = %d\n",x,a[x]}' f|sort -nr -k3
4
задан 26 October 2015 в 12:39

3 ответа

Можно сделать:

tr -s ' ' <file.txt | tr ' ' '\n' | sort -n | uniq -c | sort -k1,1rn -k2,2rn | sed 's/^ \+//; s/ /=/'
  • tr -s ' ' превратит последовательные пробелы в один

  • tr ' ' '\n', преобразует пробелы в новые строки

  • sort -n, сделает числовой sort - луг

  • uniq -c сделает, количество

  • sort -k1,1rn -k2,2rn | sed 's/^ \+//; s/ /=/' отформатирует вывод путем, Вы хотите.

Пример:

$ tr -s ' ' <file.txt | tr ' ' '\n' | sort -n | uniq -c | sort -k1,1rn -k2,2rn | sed 's/^ \+//; s/ /=/'
12=44
12=22
10=32
8=43
7=20
6=33
6=29
6=26
6=19
6=18
6=17
6=13
6=8
6=6
5=40
5=38
5=31
5=27
5=24
5=23
5=9
5=5
5=3
4=42
4=37
4=36
4=35
4=28
4=21
4=16
4=14
4=12
4=11
3=45
3=39
3=34
3=10
3=2
3=1
2=41
2=25
2=15
2=7
2=4
6
ответ дан 23 November 2019 в 11:41

Это производит количество количества случаев числа, отсортированного в порядке убывания по количеству случаев:

$ awk '{for (i=1;i<=NF;i++) a[$i]++;} END{for (i in a)print i"="a[i]}' file | sort -rnt= -k2,2
44=12
22=12
32=10
43=8
20=7
8=6
6=6
33=6
29=6
26=6
19=6
18=6
17=6
13=6
[...snip...]

В вышеупомянутом, 44=12 средства, что 44 был повторен 12 времена.

GNU awk

, Если у Вас есть GNU awk установленная (простофиля), можно избавить от необходимости конвейер и сделать все это в одном awk операторе:

awk 'BEGIN{PROCINFO["sorted_in"]="@val_num_desc"} {for (i=1;i<=NF;i++) a[$i]++;} END{for (i in a)print i"="a[i]}' file
6
ответ дан 23 November 2019 в 11:41

Просто изменение AWK (у меня нет AWK в течение долгого времени...)

awk -v RS="[ \n]+" '{a[$1]++} END{ for(b in a){print b,a[b] | "sort -rnk2,2"}}'
0
ответ дан 23 November 2019 в 11:41

Другие вопросы по тегам:

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