2つの異なるファイル内の2つの列の値を比較し、差の絶対値が小さい最大値より小さい行全体をエコーする方法は?

2つの異なるファイル内の2つの列の値を比較し、差の絶対値が小さい最大値より小さい行全体をエコーする方法は?

2つのファイルのうち6列目の値を1行ずつ比較し、その行とその内容全体をエコーし​​て結合ファイルにパイプしたいと思います。つまり、1つのファイルの行を話し、その行を言います。 2つのファイルの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}'

関連情報