比较两个文件的列值

时间:2015-11-07 08:25:01

标签: awk sed

File1中:

judi /var 80  
judi / 76  
judi /opt 85 

文件2:

judi /var 80  
judi / 80  
judi /opt 86 

在File2" /"值是(80)高于File1(76)
在File2" / opt"值为(86)高于File1(85)

我需要获得最高值的输出

judi / 80  
judi /opt 86 

1 个答案:

答案 0 :(得分:3)

$ paste file1 file2 | awk '$6>$3{print $4,$5,$6} $6<$3{print $1,$2,$3}'
judi / 80
judi /opt 86

如何运作

  • paste file1 file2

    将这些行合并在一起,如:

    $ paste file1 file2
    judi /var 80    judi /var 80
    judi / 76       judi / 80
    judi /opt 85    judi /opt 86
    
  • $6>$3{print $4,$5,$6}

    如果第六个字段大于第三个字段(意味着file2中的值大于file1中的值),则打印file2中的值。

  • $6<$3{print $1,$2,$3}

    或者,如果第三个字段大于第六个字段(意味着file1中的值大于file2中的值),则从file1打印值。

处理替代格式

假设每个文件可以包含任意数量的空格分隔字段,而我们要比较的数字将始终是最后一个字段。在那种情况下:

$ awk -v f=file2 '{a=$0; n=$NF; getline <f} n>$NF{print a} n<$NF' file1
judi / 80
judi /opt 86

这将从file1读取并将整行保存为变量a,将最后一个字段中的数字保存为变量n。然后,使用getline <f从file2读取,将file2的整行放在变量$0中,将最后一个数放入变量$NF。然后我们进行比较并打印出所需的行。