我想计算文件中匹配行的最小值和最大值:
我有:
xxx 5
xxx 0
xxx 10
yyy 1
yyy 5
yyy 10
我希望输出:
xxx 0 10
yyy 1 10
xxx
和yyy
匹配的最小值和最大值。
我的代码是:
awk '{if(min==""){min=max=$2}
if($2>max) {max=$2}
if($2<min) {min=$2}
n[$1]++}
END {for (l in n) {print l "\t" min[l] }}' inputfile
非常感谢您的帮助。
答案 0 :(得分:2)
你需要这个数组:
awk '!($1 in min) {min[$1]=$2; max[$1]=$2}
{max[$1]=(max[$1]<$2?$2:max[$1])
min[$1]=(min[$1]>$2?$2:min[$1])}
END { for (i in max) print i, min[i], max[i]}' file
max[]
包含每个值的最大值。这同样适用于min[]
。
!($1 in min) {min[$1]=$2; max[$1]=$2}
如果当前字段没有min
,请对其进行初始化。max[$1]=(max[$1]<$2?$2:max[$1])
如果当前第二个字段大于第一列的相应最大值,请替换。min[$1]=(min[$1]>$2?$2:min[$1])
与最低限度相同。END { for (i in max) print i, min[i], max[i]}
遍历结果并打印出来。$ awk '!($1 in min) {min[$1]=$2; max[$1]=$2} {max[$1]=(max[$1]<$2?$2:max[$1]); min[$1]=(min[$1]>$2?$2:min[$1])} END { for (i in max) print i, min[i], max[i]}' a
yyy 1 10
xxx 0 10
我们需要在读取第一行时定义最小值和最大值!
$ cat a
x -1
x 0
y 1
x -3
$ awk '!($1 in min) {min[$1]=$2; max[$1]=$2} {max[$1]=(max[$1]<$2?$2:max[$1]); min[$1]=(min[$1]>$2?$2:min[$1])} END { for (i in max) print i, min[i], max[i]}' a
x -3 0
y 1 1