AWK选择更高的分数

时间:2016-04-01 07:23:18

标签: bash awk

我有包含以下行的txt文件:

22 ./06a_kéz.model.txt
22 ./08a_ív.model.txt
23 ./12_iker.model.txt
23 ./15_szék.model.txt
14 ./06_ta.model.txt
1 ./03a_ösc.model.txt

我需要选择分数较高的行,我尝试这样做:

awk '{ if ($1 > score) score=$1" "$2}END{print score}'

但我需要在这个给定的例子中提取得分最高的两行。

预期产出:

23 ./12_iker.model.txt
23 ./15_szék.model.txt

3 个答案:

答案 0 :(得分:1)

在awk中使用这个标准2传递模式:

awk 'FNR==NR{if ($1>max) max=$1; next} $1==max' file file

23 ./12_iker.model.txt
23 ./15_szék.model.txt

替代方案你可以使用这个更长的单通道awk命令:

awk '$1>=max{max=$1; a[max] = (a[max]!="")?a[max] ORS $0: $0} END{print a[max]}' file

23 ./12_iker.model.txt
23 ./15_szék.model.txt

答案 1 :(得分:0)

我这里没有awk进行测试,但会尝试类似这样的脚本:

    { if ($1 == score) { result = result $0 "\n"}
      if ($1 > score) { score=$1; result = $0 "\n"}}
END {print result}

作为一个单行:

 awk '{ if ($1 == score) { result = result $0 "\n"} if ($1 > score) { score=$1; result = $0 "\n"}} END{print result}'

答案 2 :(得分:0)

没有awk(假设你的分数在一个名为file的文件中,分数与其余部分之间有空格):

grep "^$(cut -d " " -f1 file | sort -rn | head -1) " file