두 개의 서로 다른 파일에 있는 두 열의 값을 비교하고 차이의 절대값이 작은 최대값보다 작은 전체 행을 에코하는 방법은 무엇입니까?

두 개의 서로 다른 파일에 있는 두 열의 값을 비교하고 차이의 절대값이 작은 최대값보다 작은 전체 행을 에코하는 방법은 무엇입니까?

두 파일 중 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}'

관련 정보