簡體   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