我有一个很长的文件,其中包含依赖项列表、它们的版本以及依赖项所属的服务。该文件按块排序和分隔。
这是我引用的文件文件的片段:
foo.bar.baz:json:jar:2.2.2:compile service: ServiceTwo
foo.bar.baz:json:jar:2.2.10:compile service: ServiceThree
@
asm:asm:jar:3.3.1:compile service: ServiceOne
asm:asm:jar:3.3.1:compile service: ServiceTwo
asm:asm:jar:3.3.0:compile service: ServiceThree
@
hi.bye:beatles:jar:1.6:compile service: ServiceOne
hi.bye:beatles:jar:1.5:compile service: ServiceTwo
hi.bye:beatles:jar:1.15:compile service: ServiceThree
@
如果您会注意到:版本号是somewhat在每个依赖块中从最高到最低排序。我正在尝试写一个awk
脚本,它将对各自块中的每一行从最高版本号到最低版本号进行排序。输出应如下所示:
foo.bar.baz:json:jar:2.2.10:compile service: ServiceThree
foo.bar.baz:json:jar:2.2.2:compile service: ServiceTwo
@
asm:asm:jar:3.3.1:compile service: ServiceOne
asm:asm:jar:3.3.1:compile service: ServiceTwo
asm:asm:jar:3.3.0:compile service: ServiceThree
@
hi.bye:beatles:jar:1.15:compile service: ServiceThree
hi.bye:beatles:jar:1.6:compile service: ServiceOne
hi.bye:beatles:jar:1.5:compile service: ServiceTwo
@
注意:输出中的服务名称不需要按任何特定顺序。只要版本从最高到最低排序即可。
从逻辑上讲我认为我应该设置RS="@"
并创建一个包含该块中每一行的数组,然后按版本号对这些数组进行排序并打印它们。问题是,我不知道如何按版本号对它们进行排序。这是我到目前为止所拥有的awk
script:
BEGIN {
RS = "@";
}
{
split($0, lines, "\n");
# sort the array by the version number from highest to lowest
# <--- I need help here
for(key in lines) { print lines[key]; }
delete lines;
}
END {
}
如果这是完全错误的,我愿意尝试新的方法。任何有关此问题的帮助将不胜感激!