Сортировка многострочных записей в алфавитном порядке с помощью оболочки - PullRequest
0 голосов
/ 12 сентября 2018

Существует файл, имеющий следующую структуру:

L. feritas
E. ferity

L. ars
E. art

L. solitudo
E. solitude

L. celeritas
E. celerity

Каждая строка является полем, и запись занимает несколько строк, включая поле L., поле E. ипустая строка.Как отсортировать записи по полям, помеченным L., сохранив многострочные записи без изменений?

L. ars
E. art

L. celeritas
E. celerity

L. feritas
E. ferity

L. solitudo
E. solitude

1 Ответ

0 голосов
/ 12 сентября 2018

Быстрый способ что-то придумать:

$ cat file | awk 'BEGIN{RS=""; FS="\n"; OFS="|"}{$1=$1}1' \
  | sort | awk 'BEGIN{FS="|";OFS="\n";ORS="\n\n"}{$1=$1}1'

Или вы можете записать это в одном Gnu AWK,

$ awk 'BEGIN{RS=""; ORS="\n\n"; FS=OFS="\n"; PROCINFO["sorted_in"]="@val_str_asc"}
       {a[NR]=$0}END{for(i in a) print a[i]}' file

Если вы не хотите последнийЧтобы строка была пустой, вы можете сделать следующее:

$ cat file | awk 'BEGIN{RS=""; FS="\n"; OFS="|"}{$1=$1}1' \
  | sort | awk 'BEGIN{FS="|";OFS="\n"}{$1=$1}1' | sed '$d'


$ awk 'BEGIN{RS=""; FS=OFS="\n"; PROCINFO["sorted_in"]="@val_str_asc"}
       {a[NR]=$0}END{for(i in a) print a[i] (--NR?"\n":"")}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...