Если ширина, которую вы хотите для каждого столбца, заранее определена, awk
имеет printf
, который работает так же, как в C ; здесь, если вы хотите, например, столбцы из 20, 15 и 10 символов с 2 пробелами между:
(as in Q) /State/{printf "%-20s %-15s %-10s\n", m, F, $2}
( -
выровнены по левому краю; по умолчанию выровнены по правому краю, обычно хорошо для чисел но не текст.)
Если вы хотите, чтобы ширина соответствовала данным, вы МОЖЕТЕ сохранить данные в массивах, вычислить желаемую ширину, а затем использовать эту ширину со звездочкой, например printf "% - * s" , len, data
- но , поскольку G-Man ответил на столбец
, программа делает это проще.
Хотя вы можете сделать это с помощью инструментов командной строки, вот способ сделать это быстро, если у вас есть доступ к любой базе данных Postgres (просто для развлечения):
[vagrant@localhost ~]$ cat ips.txt
72.204.55.250
72.204.55.250
72.204.55.250
72.204.55.250
72.204.55.250
96.41.51.202
208.115.113.91
178.137.94.166
178.137.94.166
208.115.113.91
96.41.51.202
141.8.143.179
141.8.143.179
[vagrant@localhost ~]$ psql
Expanded display is used automatically.
psql (9.3.15)
Type "help" for help.
vagrant=# create temp table ips (ipaddress inet);
CREATE TABLE
vagrant=# \copy ips from ips.txt
vagrant=# select count(*), ipaddress
vagrant-# from ips
vagrant-# group by ipaddress
vagrant-# order by count desc, ipaddress
vagrant-# ;
count | ipaddress
-------+----------------
5 | 72.204.55.250
2 | 96.41.51.202
2 | 141.8.143.179
2 | 178.137.94.166
2 | 208.115.113.91
(5 rows)
vagrant=# \q
[vagrant@localhost ~]$
На самом деле у меня есть песочница Postgres экземпляр на машине Vagrant для такого рода действий. Удобно.
Обратите внимание на правильную сортировку по IP-адресу, а не по алфавиту. Это связано с использованием типа данных Postgres для IP-адресов, «inet».
Я думаю, что это может быть намного проще, чем другие решения, опубликованные здесь.
С такими IP-адресами:
72.204.55.250
72.204.55.250
96.41.51.202
208.115.113.91
178.137.94.166
Вы можете просто сделать это :$ sort file | uniq -c | sort -n -r -k1,1
-n
-обрабатывать значения как числовые -r
-изменить порядок, чтобы сначала было наибольшее количество -k1
-сортировать по первому столбцу (доступны дополнительные параметры, но это все, что нам нужно здесь)