У меня есть файл с форматом строки следующим образом:

<something> <file_name> type:file <something> size:<filesize> <something>

Я хотел бы отсортировать его численно по полю "размер файла", указанному по метке «размер:». Простой номер ключа / смещение, передаваемый обычно программе сортировки, не работает, потому что нет строгого разделителя - может быть несколько пробелов перед меткой «size:» - например, в "file_name". Есть ли способ сортировки из командной строки с использованием предыдущей метки в качестве идентификатора поля?

2 ответа2

1

трудно ответить без образца.

попробуйте что-то вроде (может быть подчеркнуто, нет необходимости в \, если последний символ | |)

  awk '{for(i=1;i<=NF;i++) 
     if ( substr($i,1,5) == "size:" ) { print substr($i,6) " " $0 ; next ; }}'  file |
    sort -n | awk '{$1="" ; print } '

в принципе

  • сначала в awk ищем поле размера и ставим перед
  • сортировать с числовым аргументом
  • последний awk удалить числовой аргумент.
1

Если в <something> нет двоеточия, вы можете сказать:

sort -t : -Vk 3 file

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .