有一个具有以下结构的文件:
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
答案 0 :(得分:2)
提出一些建议的快速方法是:
$ 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