gpt4 book ai didi

shell - 使用shell按字母顺序对多行记录进行排序

转载 作者:行者123 更新时间:2023-12-05 05:14:36 27 4
gpt4 key购买 nike

有一个具有以下结构的文件:

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

最佳答案

想出一些东西的快速方法是:

$ 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

关于shell - 使用shell按字母顺序对多行记录进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52296440/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com