Awk Bash:查找第n列的最大值,并在其他列上设置条件
我有一个包含3列的bog文件,我希望找到第三列的最大值,并在它们具有相同的第一列时写入整行。我已经提出了我的问题,但现在的问题是,我有多行的最大数量。现在,我想在第二列中选择一个值最高的 我的数据:Awk Bash:查找第n列的最大值,并在其他列上设置条件,awk,Awk,我有一个包含3列的bog文件,我希望找到第三列的最大值,并在它们具有相同的第一列时写入整行。我已经提出了我的问题,但现在的问题是,我有多行的最大数量。现在,我想在第二列中选择一个值最高的 我的数据: 1 234 0.01 1 235 0.05 1 236 0.05 1 237 0.02 2 234 0.09 2 235 0.09 2 236 0.08 2 237 0.05 输出: 1 236 0.05 2 235
1 234 0.01
1 235 0.05
1 236 0.05
1 237 0.02
2 234 0.09
2 235 0.09
2 236 0.08
2 237 0.05
输出:
1 236 0.05
2 235 0.09
解决方案一:请尝试以下内容。这将按照输入文件的顺序处理第一个字段的值
awk '
FNR==NR{
b[$1]=a[$1]>$3?b[$1]:$0
a[$1]=a[$1]>$3?a[$1]:$3
next
}
($1 in a){
print b[$1]
delete a[$1]
}
' Input_file Input_file
解决方案2:以防您不关心输出中$1
(第一个字段)的顺序
awk '{b[$1]=a[$1]>$3?b[$1]:$0;a[$1]=a[$1]>$3?a[$1]:$3} END{for(i in a){print b[i]}}' Input_file
解决方案一:请尝试以下内容。这将按照输入文件的顺序处理第一个字段的值
awk '
FNR==NR{
b[$1]=a[$1]>$3?b[$1]:$0
a[$1]=a[$1]>$3?a[$1]:$3
next
}
($1 in a){
print b[$1]
delete a[$1]
}
' Input_file Input_file
解决方案2:以防您不关心输出中$1
(第一个字段)的顺序
awk '{b[$1]=a[$1]>$3?b[$1]:$0;a[$1]=a[$1]>$3?a[$1]:$3} END{for(i in a){print b[i]}}' Input_file
使用shell工具:
$ sort -k3nr -k2nr file | uniq -w 5
2 235 0.09
1 236 0.05
如果您的第一列可以匹配到一定数量的字符,那么它就可以工作<代码>man uniq:
-w, --check-chars=N
compare no more than N characters in lines
它适用于固定宽度的第一列,如:
1 Second column
1000 Second column
但不是:
1 Second
1000 Second
使用shell工具:
$ sort -k3nr -k2nr file | uniq -w 5
2 235 0.09
1 236 0.05
如果您的第一列可以匹配到一定数量的字符,那么它就可以工作<代码>man uniq:
-w, --check-chars=N
compare no more than N characters in lines
它适用于固定宽度的第一列,如:
1 Second column
1000 Second column
但不是:
1 Second
1000 Second
两者都很完美!为什么我要放两次输入文件?如果我只输入一次,它就不起作用了。两个都很好地工作!为什么我要放两次输入文件?如果我只输入一次就不行了。谢谢你的回复。它适用于示例数据,但似乎不适用于非常大的数据文件(我的真实数据集)。第一列相同的行数是10000,我应该把10001改为5吗?输出也未排序。不,N值是第一列的长度。它希望第一列的宽度是固定的。谢谢你的回复。它适用于示例数据,但似乎不适用于非常大的数据文件(我的真实数据集)。第一列相同的行数是10000,我应该把10001改为5吗?输出也未排序。不,N值是第一列的长度。它希望第一列具有固定的宽度。