awk - AWK:有条件地比较一个文件中的两列
问题描述
我有一个以管道(|)
分隔的文件,其中有 ID,并且在和$1
中有值。该文件中有大约 5000 行,每个 ID重复多次。文件看起来像这样$2
$3
$1
a|1|2
a|2|0
a|3|3
a|4|0
b|5|3
b|2|4
我正在尝试打印当前行上 $2 <= max $3 的行,因此输出将为
a|1|2
a|2|0
a|3|3
b|2|4
对此的任何线索将不胜感激!谢谢你。
解决方案
听起来您只想为 each打印小于或等于 max 的$1
那些行:$2
$3
$ cat tst.awk
BEGIN { FS="[|]" }
NR==FNR {
max[$1] = ( ($1 in max) && (max[$1] > $3) ? max[$1] : $3 )
next
}
$2 <= max[$1]
$ awk -f tst.awk file file
a|1|2
a|2|0
a|3|3
b|2|4
推荐阅读
- javascript - 基于条件 JavaScript 将对象添加到数组
- mysql - Docker 容器从 CLI 开始,但不是从 docker-compose.yml
- c# - GetLastInputInfo 不返回 dwTime
- c - 使用 spidev C 读取的数据与示波器测量结果不一致
- r - 根据主键添加列
- python - 在heroku上下载图像
- reactjs - 如何在 framer.motion 中的布局动画后摆脱条纹
- redis - 如何查看我的 redis 服务器每天执行多少命令?
- xcode - 有没有一种简单的方法来下载 Firebase 存储和数据库并在开发模式下使用这些快照,而不是调用 API?
- python-3.x - 将 TextInput 更改为仅显示 Kivy Python 的函数