如何解决自定义排序以对庞大数据集中的特定字段进行排序
我有一个场景……我需要进行自定义排序
在第 4 列中……这些是可能的值。TUN
PB
TP
我可以对整个数据集的第一个和第二个字段进行排序
文件大小 > 500MB 因此,还应考虑性能。
但是对于第 4 个字段.. 我必须以这样的方式创建自定义排序,以使第 4 个字段的输出按此顺序排列。TUN
PB
TP
输入数据:
0022|||PB||||||||||||||||
0022|||TN|0|||||||||||||||||||||
预期输出是
0022||TN|0|||||||||||||||||||||
0022|||PB||||L|||||||||||||||||||||||
有什么建议吗?
解决方法
您正在寻找的是一种叫做decorate-sort-undecorate的习语。这个想法是根据您要排序的数据添加一个具有可排序值的列,对其进行排序,然后删除额外的列以按正确的顺序获取原始数据。
示例:
$ cat sample.txt
a|b|c|PLAYBACK|x
d|e|f|TUNES|y
g|h|i|TRICKPLAY|z
$ awk 'BEGIN { FS=OFS="|"; order["TUNES"] = 1
order["PLAYBACK"] = 2; order["TRICKPLAY"] = 3 }
{ print order[$4],$0 }
' sample.txt | sort -t'|' -k1,1n | cut -d'|' -f 2-
d|e|f|TUNES|y
a|b|c|PLAYBACK|x
g|h|i|TRICKPLAY|z
当然,您必须调整排序键以获得所需的最终排序(您提到了对其他列的排序,但没有提到它们应该用作排序键的顺序)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。