我的文件看起来像这样:(感谢@fredtantini)
37.36 44.22 -221.12 0.85 2.02 4.00 0.49 2345.147 '/home/~/gold_soln_x_m1_70.sdf' 'X'
38.46 45.89 -229.45 1.49 1.94 4.00 0.61 2370.912 '/home/~/gold_soln_y_m1_69.sdf' 'Y'
39.90 46.86 -234.28 0.29 2.66 4.00 1.00 2368.052 '/home/~/gold_soln_w.sdf' 'W'
37.75 48.10 -240.50 2.58 3.77 4.00 0.60 2220.947 '/home/~/gold_soln_z.sdf' 'Z'
我需要输出:
39.90 46.86 -234.28 0.29 2.66 4.00 1.00 2368.052 '/home/~/gold_soln_w.sdf' 'W'
打印在另一个文件中,但我从未使用过awk,所以我不知道如何组织我的脚本。寻找答案我发现了这个:
awk'
function max(x){i=0;for(val in x){if(i<=x[val]){i=x[val];}}return i;}
{a[$2]=$2;next}`
END{minimum=min(a);maximum=max(a);print "Maximum = "maximum "}'
但它不起作用,我不明白为什么。
完整的脚本如下所示:
#!/bin/bash
cd /home/~/
for k in $( cat lista_sottocartelle ); do
cd /home/~/$k
awk 'BEGIN{max=0}{if($1>max){max=$1;maxline=$0}}END{print maxline}' bestranking.lst >> indirizzi_ASP.lst
输出为:语法错误:意外的文件结尾
我忘了在脚本末尾添加完成。 谢谢你们所有人。
答案 0 :(得分:2)
只需使用:
~$ awk 'BEGIN{max=0}{if($1>max){max=$1;maxline=$0}}END{print maxline}' f
39.90 46.86 -234.28 0.29 2.66 4.00 1.00 2368.052 '/home/~/gold_soln_w.sdf' 'W'
对于每一行,检查第一个数字是否大于当前最大数量。如果是,则将行保存在maxline
中。最后,打印此行。
做同样事情的较短版本(感谢@Jotne):
awk '$1>max {max=$1;maxline=$0}END{print maxline}'
您的脚本有几个问题($2
是第二列,未定义min函数...)