我有这个文件
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
答案 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)