使用第1列中的最小值获取整行

时间:2014-03-10 11:20:10

标签: awk

我有这个文件

2  1
12 2
34 1
56 1
45 3
33 2
77 1
83 2
62 3
75 3

我想从第1列的最小值中获取整行,如下所示

2  1
12 2
45 3

3 个答案:

答案 0 :(得分:1)

这是从

开始的
{ if (!vals[$2] || vals[$2] > $1) vals[$2] = $1 }
END { for (idx in vals) print vals[idx] " " idx }

您应该添加健壮性代码。

答案 1 :(得分:1)

这是awk

awk '!a[$2]||a[$2]>$1 {a[$2]=$1} END {for (i in a) print a[i],i}' file
2 1
12 2
45 3

如果我正确解码您的数据:

cat file
0.020003 3
0.122203 3
0.122324 3
0.122445 3
0.122566 3
0.203582 43
0.225691 3
0.225812 3
0.226899 3
0.22702 3
0.228107 3
0.228228 3
0.229315 3
0.229436 3
0.325978 5
0.329179 3
0.3293 3
0.330387 3
0.330508 3
0.331595 3
0.331716 3
0.332803 3
0.332924 3
0.334011 3
0.334132 3
0.335219 3
0.33534 3
0.336427 3
0.336548 3
0.337635 3
0.337756 3
0.345776 43
0.345897 43
0.346018 43
0.346138 43
0.430173 5
0.430294 5
0.430414 5
0.430535 5
0.432667 3
0.432788 3
0.433875 3
0.433996 3
0.435083 3
0.435204 3
0.436291 3
0.436412 3

然后运行awk命令:

awk '!a[$2]||a[$2]>$1 {a[$2]=$1} END {for (i in a) print a[i],i}' file
0.325978 5
0.203582 43
0.020003 3

这就是你应该期待的。使用列2作为索引

,所有结果都是最小的

由于您的数据似乎已经排序,因此也适用:

awk '!a[$2]++' file
0.020003 3
0.203582 43
0.325978 5

答案 2 :(得分:1)

如果您的文件已经排序,那么您可以这样做:

awk '!a[$2]++' file

如果不是,那么您可以快速对其进行排序并将已排序的数据提供给awk

sort -nk1 -nk2 file | awk '!a[$2]++'

awk '!a[$2]++' < <(sort -nk1 -nk2 file)