如何比较两个不同文件中两列中的值,回显完整行,其中差异的绝对值

如何比较两个不同文件中两列中的值,回显完整行,其中差异的绝对值

我想对两个文件的第 6 列中的值进行逐行比较,然后回显这些行及其完整内容,将它们通过管道传输到一个组合文件中,例如一个文件中的行,然后是该行当两个文件第 6 列中的值的差的绝对值小于某个小的最大值(例如 < 0.001)时,从紧接其下的下一个文件开始,全部由分隔线分隔。例如,我不会回显或打印第 6 列值中的差的绝对值大于 0.001 的所有其他行,而是仅回显或打印 < 0.001 的情况。我该怎么做呢?

答案1

awk '
  function abs(v) {
    return (v < 0 ? -v : v)
  }
  {l1=$0; f6_1=$6; getline < "file2"; l2=$0; f6_2=$6}
  abs(f6_1 - f6_2) < 0.001 {print l1 "\n" l2 "\n"}' file1

答案2

我会预处理以paste交错线条​​,然后馈送到awk

paste -d '\n' file1 file2 |
awk -v threshold=0.001 'NR % 2 {a=$6; b=$0; next};
$6 - a > -threshold && $6 - a  <threshold {print b; print ""; print $0}'

相关内容