Сортировка IP-адреса согласно второму полю в файле

Со стандартными доступными инструментами:

Перечислять лучшие 10 самых больших файлов из текущего каталога: du . | sort -nr | head -n10

Перечислять самые большие каталоги из текущего каталога: du -s * | sort -nr | head -n10

ОБНОВИТЕ В эти дни, я обычно использую больше удобочитаемой формы (как Jay Chakra объясняет в другом ответе, и кончите | head -n10, просто позвольте ему прокрутить от экрана. Последняя строка имеет самый большой файл или каталог (дерево).

Иногда, например, когда у Вас есть много точек монтирования в текущем каталоге вместо использования -x или несколько --exclude=PATTERN, более удобно смонтировать файловую систему на неиспользованной точке монтирования (часто /mnt) и работа оттуда.

Обратите внимание, это при работе с большим (NFS) объемов, можно вызвать существенную нагрузку на бэкенд устройства хранения данных (файловый сервер) при выполнении du по большому количеству (sub) каталогов. В этом случае лучше рассмотреть установку quota на объеме.

0
08.04.2013, 16:58
3 ответа

Если Вы имеете GNU awk вот острота, в которой Вы нуждаетесь:

$ awk '{n=split($2,ip,".");if(n==4)print $0;else a[$2]=$0}END{n=asorti(a,b);for(i=1;i<=n;i++)print a[b[i]]}' file
/etc/backup/app 172.1.120.12   172.110.120.98 
/etc/backup/app 172.1.120.1    172.110.120.7 
/var/log/df     193.23.2.111   193.23.2.159
/etc/backup/app 172.1.120      172.110.120 
/etc/backup/app 192.1.120      192.120.120 
/var/log/df     193.23.2       193.23.2
2
28.01.2020, 02:37
awk '{printf "%s.,%s\n", $2, $0}' | \
sed -E -e 's/^(([0-9]+\.){4}),/0.\1,/' -e 's/^(([0-9]+\.){3}),/1.\1,/' | \
sort -t. -k 1,1 -k 3,3 | \
sed -E -e 's/^[^,]+,//'`

Идея к:

  1. Скопируйте соответствующее поле в начало каждой строки и добавьте специальный разделитель (запятая в этом случае)
  2. Использовать sed предварительно ожидать некоторое значение, которое зависит от количества октетов в IP-адресе (я использовал 0 для 4 октетов и 1 для 3 октетов),
  3. Отсортируйте значения на соответствующих полях
  4. Полоса все мы добавили
0
28.01.2020, 02:37
  • 1
    , которым проблема состоит в том, что sed-E не является недопустимой опцией на Солярисе, действительно ли возможно найти, что другой флаг поддерживает и ОС (Linux и Солярис)? –  yael 08.04.2013, 17:28
cat <(awk '{if($2~/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/){print $0}}' test.txt | sort -k 2) <(awk '{if($2~/^[0-9]*\.[0-9]*\.[0-9]*$/){print $0}}' test.txt | sort -k 2)
  • Строки соответствия, где второе поле имеет 4 октета и вид
  • Строки соответствия, где вторые полевые концы после 3 октетов и вида
  • Свяжите два результата вместе
0
28.01.2020, 02:37

Теги

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