首页 > 解决方案 > 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

对此的任何线索将不胜感激!谢谢你。

标签: awk

解决方案


听起来您只想为 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

推荐阅读