2017-02-09 67 views
-1
operator1,4578 
operator2,1234 
operator3,9875 
operator4,6357 
operator1,6353 
operator4,9765 
operator1,6347 
operator1,6798 
operator3,6793 
operator3,1465 
operator4,6796 
operator4,3333 

我需要使用awkpython找出最小和各运营商的最大值(在awk需要命令以及在Python太)和输出将是如下:我需要找到最大和最小值横行

Name  Min  Max 
operator1 4578  6798  
operator2 1234  
operator3 1465  9875  
operator4 3333 9765  

谁能帮我请

+0

查找在python类型的字典和关联数组在awk中缺少输出operator2如 –

+0

最大值。它应该是1234. –

+0

嗨,何塞,我做了awk -F“,”'BEGIN {max = -1; min = -1} $ 1 ==“operator1”{max} = max <$ 2? $ 2:max; min =(min == -1 || min> $ 2)? $ 2:min } END {printf“operation2%d%d”,max,min} 'filename –

回答

0

你可以试试这个:

awk -F, ' 
    min[$1]>$2||!min[$1]{ 
     min[$1]=$2 
    } 
    max[$1]<$2{ 
     max[$1]=$2 
    } 
    END{ 
    for(i in max){ 
     print i,min[i],(max[i]!=min[i]?max[i]:"") 
    } 
    }' file 

的2阵列minmax这是在解析输入文件填充值使用该脚本化妆。

解析完成后,将打印这两个数组。

请注意,max[i]!=min[i]?max[i]:""正在跳过最大值,以防与最小值相同。

我让你把标题行,并与column命令的情况下,你想缩进玩...

+0

非常感谢...它的工作:) –

0

@amit库马尔:尝试:

awk -F, 'FNR==NR{A[$1]=A[$1]>$NF?A[$1]:$NF;B[$1]=B[$1]>$NF?$NF:(B[$1]?B[$1]:$NF);next} FNR==1 && FNR!=NR{print "Name Min Max"}($1 in A){print $1 "\t" B[$1] "\t" A[$1];delete B[$1];delete A[$1]}' Input_file Input_file 

这里我将字段分隔符作为“,”然后FNR == NR条件将确保它只有在第一次读取Input_file时才会执行。 FNR和NR都是awk的内置关键字,并在其中定义行号。每当读取新的Input_file时,FNR的值将被重置,其中N的值将持续增加,直到所有文件被成功读取。然后在那个块中,我创建了一个名为A的数组,其索引是$ 1,我正在检查前一个A [$ 1]的值是否大于当前相同的数组索引,然后更改A [$ 1]的值到目前的$ NF保持它原样(这基本上是为每行$ 1的最大值),同样的事情我正在做的Input_file中的$ 1的MINIMUM值和存储值到数组B.下一步将跳过所有下一个即将发表的声明,所以只有FNR == NR条件将被执行。 Now FNR == 1 & &当读取第二个文件的第一行时,FNR!= NR条件将仅为TRUE,因为在写入实际输出之前,我需要编写标题列。 (A中$ 1)现在检查数组A中是否存在当前行$ 1,然后根据OP的请求打印当前$ 1和数组A的值,然后打印数组B的值。

编辑:现在也添加一个非线性形式的解决方案。

awk -F, 'FNR==NR{ 
       A[$1]=A[$1]>$NF?A[$1]:$NF; 
       B[$1]=B[$1]>$NF?$NF:(B[$1]?B[$1]:$NF); 
       next 
       } 
     FNR==1 && FNR!=NR{ 
           print "Name Min Max" 
          } 
     ($1 in A){ 
         print $1 "\t" B[$1] "\t" A[$1]; 
         delete B[$1]; 
         delete A[$1] 
        } 
     ' Input_file Input_file 
+0

嗨Ravinder,感谢您的详细解释,但代码没有给出任何输出,而且,它只是一个文件不是两个文件 –

+0

纠正阿米特,它是1个文件,但我正在读它两次,试试看,它应该飞。让我知道同样的。此外,为什么我读取Input_file 2次,因为它会以相同的顺序输出Input_file中的输出,否则,如果读取数组,它将不会按顺序打印元素。 – RavinderSingh13

相关问题