我很感激许多贡献者迅速提供了许多解决方案! (AWK:打印一个字段中具有最大值的所有行每个其他字段,包括具有最大值的相同行 https://stackoverflow.com/questions/75392860/awk-print-all-rows-with-max-value-in-one-field-per-the-other-field-including-id/75401868#75401868)
这个问题包括多一列的数据,我想保留每列 1 的第二列中具有最高值的行,包括包含多列的数据中具有最大值的相同行,并打印所有列。
Data
a 130 data1
a 55 data2
a 66 data3
b 88 data4
b 99 data5
b 99 data6
c 110 data7
c 130 data8
c 130 data9
所需输出
a 130 data1
b 99 data5
b 99 data6
c 130 data8
c 130 data9
代码来自@jared_mamrot完美运行并打印出所有列。
awk 'NR==FNR{if($2 > max[$1]){max[$1]=$2}; next} max[$1] == $2' file file
代码@Andre Wildberg 还提供了完美运行并打印出所有列.
awk 'arr[$1] < $2{arr[$1] = $2}
arr[$1] == $2{n[$1,arr[$1]]++; line[$1,arr[$1],n[$1,arr[$1]]] = $0}
END{for(i in arr){
j=0; do{j++; print line[i,arr[i],j]} while(j < n[i,arr[i]])}}' file
下面的 awk 脚本也由 @Ed Morton 编写非常适合我之前的 2 列数据。它打印两列;键和值。
我的进一步问题是,当我的数据中有多个列时,我应该如何修改此脚本以打印所有列。
sort file | awk '
{ cnt[$1,$2]++; max[$1]=$2 }
END { for (key in max) { val=max[key]; for (i=1; i<=cnt[key,val]; i++) print key, val } }
'
谢谢大家的大力帮助!!!