繁体   English   中英

使用awk面对文件每一行中的第一个数字,并打印包含最大行的整行

[英]use awk to confront first number in every line of a file and print the whole line that contains the largest one

我的文件如下所示:(感谢@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 "}'

但它不起作用,我也不知道为什么。

我试过@fredtantini答案,它可以从终端工作,但我需要将其插入脚本中:

完整的脚本如下所示:

#!/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

输出为: 语法错误:文件意外结束

编辑

我只是忘了在脚本末尾添加完成。 感谢大家。

只需使用:

~$ 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函数…)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM