sorting - 按 2 行为一组对文本文件进行排序
问题描述
我有一个具有以下结构的文件:
A 35 74 dsadasd/1 0 +
A 95 74 dsadasd/2 0 -
B 75 159 dsadasd/2 0 +
B 78 852 dsadasd/1 0 -
C 12 789 dsadasd/1 0 +
C 91 546 dsadasd/2 0 -
A 87 52 dsadasd/2 0 +
A 52 15 dsadasd/1 0 -
我想按两行两行一组的第四个字段(基本上是按最后一个数字排序)对其进行排序,以输出以下结果:
A 35 74 dsadasd/1 0 +
A 95 74 dsadasd/2 0 -
B 78 852 dsadasd/1 0 -
B 75 159 dsadasd/2 0 +
C 12 789 dsadasd/1 0 +
C 91 546 dsadasd/2 0 -
A 52 15 dsadasd/1 0 -
A 87 52 dsadasd/2 0 +
TIA
解决方案
在 awk 中:
$ awk '{
k=NR%2; a[k]=$4; b[k]=$0 # store compare value and
} # record for 0 and 1
!(NR%2) { # on even we compare
print b[(a[0]>a[1])] ORS b[(a[0]<=a[1])] # and print the smaller first
}' file
A 35 74 dsadasd/1 0 +
A 95 74 dsadasd/2 0 -
B 78 852 dsadasd/1 0 -
B 75 159 dsadasd/2 0 +
C 12 789 dsadasd/1 0 +
C 91 546 dsadasd/2 0 -
A 52 15 dsadasd/1 0 -
A 87 52 dsadasd/2 0 +
推荐阅读
- javascript - vue组件html不显示
- python - 将浮点数写入 csv 文件到 2 个有效数字
- gitlab-ci - 使用 url 的 Gitlab CI 管道状态
- javascript - 移动汉堡不关闭
- security - 对弹性搜索的攻击受阻?
- batch-file - 为什么批处理文件在使用 Windows 调度程序运行时会引发错误文件未找到
- elasticsearch - 防止在 ElasticSearch 中对某些字母字符进行标记化
- javascript - 从 QWebEngine QT 5.13.0 中的 javascript dilog 获取下载文件名
- python - 表示集合中数字范围的最佳方法
- amazon-web-services - 解析参数“cli-input-json”时出错:JSON 无效:无法解码 JSON 对象