[英]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 "}'
但它不起作用,我也不知道為什么。
完整的腳本如下所示:
#!/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.