Awk 查找相应的“文件”;X";两个不同文本文件中两列之间的最大偏差值

Awk 查找相应的“文件”;X";两个不同文本文件中两列之间的最大偏差值,awk,Awk,我有两个文件,有N个列,第一行有一个标题(两个文件的标题相同) 然后,对于每一列,我需要找出最大值和相应的标题值 例如,列e的最大值为7,对应于标题值3 The actual desired output given that input Header value = { 3.0, 2.0, 3.0 Or 2.0 } 到目前为止,我只能减去列值并将它们存储在文件中。(我仍然有打印页眉的问题) awk'FNR==NR{for(i=2;i1{for(i=2;i awk '(NR==1){ prin

我有两个文件,有N个列,第一行有一个标题(两个文件的标题相同)

然后,对于每一列,我需要找出最大值和相应的标题值

例如,
列e
的最大值为7,对应于
标题值3

The actual desired output given that input Header value = { 3.0, 2.0, 3.0 Or 2.0 }
到目前为止,我只能减去列值并将它们存储在文件中。(我仍然有打印页眉的问题)


awk'FNR==NR{for(i=2;i1{for(i=2;i

awk '(NR==1){ print }    # print header
     (FNR==1){ next }    # skip header
     # read file1 in memory
     # store full line with key $1
     (NR==FNR) { a[$1]=$0; next }
     # read file2 and
     # request file1 value by key, and split in array b
     { split(a[$1],b) }
     # perform magic
     { for(i=2;i<=NF;++i) $i-=b[i] }
     { print }' file1 file2
awk'(NR==1){print}#打印头
(FNR==1){next}#跳过标题
#在内存中读取文件1
#使用$1键存储完整的行
(NR==FNR){a[$1]=$0;next}
#读取文件2和
#按键请求file1值,并在数组b中拆分
{拆分(a[$1],b)}
#表演魔术

{为了(i=2;i
awk
拯救

$ paste file1 file2 | 
  awk 'function abs(x) {return x<0?-x:x}                                                                                  
       NR>1 {n=NF/2; 
             for(i=2;i<=n;i++) 
               {v[i]=abs($i-$(i+n)); 
                if(v[i]>max[i]) {max[i]=v[i]; maxIx[i]=$1}}} 
       END {printf "{";
            for(i=2;i<n;i++) printf "%s, ",maxIx[i]
            print maxIx[n]"}"}'

{3.0, 2.0, 2.0}
$paste file1 file2|
awk'函数abs(x){返回x1{n=NF/2;
对于(i=2;imax[i]){max[i]=v[i];maxIx[i]=1}}
结束{printf{”;

对于(i=2;i
NR==1{savedHdr=$0}
?或者您是否希望/需要允许跳过输出中的列?祝您好运。这可以用awk来完成,但python更适合这项工作。只是一个建议。我对python不太熟悉。@EdMorton awk是一种专门的语言,很适合快速完成某些任务。python是一种通用语言,我认为更适合这种工作像被询问的内容这样复杂的东西。@kvantour这是我这边的一个愚蠢的错误,但是我怎么能只打印绝对值。ThanksGreat,我做了一个abs函数,然后调用它。它成功了。ThanksThanks。但是列数未知。因为你的awk脚本只适合4列。很容易使它适用于任何列数umns,我做到了。如果你能为代码添加一些解释,那就太好了。再次感谢
awk '(NR==1){ print }    # print header
     (FNR==1){ next }    # skip header
     # read file1 in memory
     # store full line with key $1
     (NR==FNR) { a[$1]=$0; next }
     # read file2 and
     # request file1 value by key, and split in array b
     { split(a[$1],b) }
     # perform magic
     { for(i=2;i<=NF;++i) $i-=b[i] }
     { print }' file1 file2
$ paste file1 file2 | 
  awk 'function abs(x) {return x<0?-x:x}                                                                                  
       NR>1 {n=NF/2; 
             for(i=2;i<=n;i++) 
               {v[i]=abs($i-$(i+n)); 
                if(v[i]>max[i]) {max[i]=v[i]; maxIx[i]=$1}}} 
       END {printf "{";
            for(i=2;i<n;i++) printf "%s, ",maxIx[i]
            print maxIx[n]"}"}'

{3.0, 2.0, 2.0}