То, что вы ищете, является классическим примером объединения набора основных инструментов Linux в конвейере:
Это решит вашу первую проблему:
$ awk '(NR>1){print $2}' file | sort | uniq -c
5 name1
3 name2
2 name3
2 name4
1 name5
1 name6
1 name7
Это решит вашу вторуюпроблема:
$ awk '(NR>1){print $2}' file | sort | uniq -c | awk '{print $1}' | uniq -c
1 5
1 3
2 2
3 1
Вы заметили, что форматирование немного отсутствует, но это, по сути, решает вашу проблему.
Конечно, в awk вы можете сделать это в одномиди, но я верю, что ты должен попытаться понять вышеприведенную строку.Посмотрите на man sort
и man uniq
.Решение awk :
Задача 1:
awk '(NR>1){a[$2]++}END{ for(i in a) print i "," a[i] }' file
name6,1
name7,1
name1,4
name2,3
name3,2
name4,2
name5,1
Задача 2:
awk '(NR>1){a[$2]++; m=(a[$2]<m?m:a[$2])}
END{ for(i in a) c[a[i]]++;
for(i=1;i<=m;++i) print i, "appearance,", c[i]+0
}' foo.txt
1 appearance, 3
2 appearance, 2
3 appearance, 1
4 appearance, 0
5 appearance, 1