我有两个这样的列数据:
*x y
0 -3.9
0.14 -4.32
0.14 -4.5
0.23 -3.95
0.23 -3.8
0.5 -4.1
0.7 -4.3
...
1.0 -4.5*
如您所见,某些x值相同。 如果x值相同,我想选择最低的y值。 因此,上述数据将像这样减少:
x y
0 -3.9
0.14 -4.5
0.23 -3.95
0.5 -4.1
0.7 -4.3
...
1.0 -4.5
有人知道如何通过简单的脚本来制作它吗?
谢谢!
答案 0 :(得分:1)
如果您具有Datamash,则无需脚本。 sudo apt install datamash
在基于debian的(Ubuntu)系统上。 pacman和其他“默认”程序包管理器存储库也倾向于将其作为可用程序包。
Khazad-dum:~/test£ cat thingy
0 -3.9
0.14 -4.32
0.14 -4.5
0.23 -3.95
0.23 -3.8
0.5 -4.1
0.7 -4.3
告诉datamash按空格进行列化,按列1分组,并打印列2的最小值:
Khazad-dum:~/test£ datamash -W -g 1 min 2 <thingy
0 -3.9
0.14 -4.5
0.23 -3.95
0.5 -4.1
0.7 -4.3
以下awk将起作用,直到第2列包含正值。您需要修改if语句,以检查是否存在该键。读者的练习:“如何判断awk关联数组是否包含键”(c1
是关联数组...列1 / $1
是键)
awk '{if (c1[$1] > $2) {c1[$1] = $2}} END {for (key in c1) {print key " " c1[key]}}' thingy
答案 1 :(得分:-1)
我找到了想要的答案:
sort -k1,1n -k2,2g file | awk '!a[$1] {a[$1] = $2} $2 == a[$1]'