두 파일을 비교하고 fileA의 내용이 fileB에 있는지 확인하고 숫자만 표시하는 방법은 무엇입니까?

두 파일을 비교하고 fileA의 내용이 fileB에 있는지 확인하고 숫자만 표시하는 방법은 무엇입니까?

유사한 질문을 Google과 웹사이트에서 검색해 보았으나 원하는 내용을 찾을 수 없었습니다. 2개의 파일이 있는데 둘 다 숫자로만 채워져 있습니다. FileB의 행을 FileA와 비교하는 방법을 알고 싶습니다. FileB의 행이 FileA에 없으면 무시하면 됩니다. 비교 후 FileA의 특정 데이터만 인쇄하고 싶습니다. 더 자세히 설명하자면 둘 다 이미 숫자로 정렬되어 있습니다.

파일 A:

103445  -630
103572  -638
107586  -133
109754  -466
111900  -643
112699  -371
112991  -17
113863  -175
114189  -691

파일 B:

101191  1136
103184  1322
103445  -210
103572  1424
104618  28
105395  1052

보시다시피 B의 1-2번째 줄은 A의 줄이 아니기 때문에 완전히 무시하고 있습니다. B에서 A의 행의 처음 6자만 저장하고 싶습니다. 그런 다음 실행할 다른 명령이 몇 가지 있지만 이를 수행하는 방법을 알고 있다고 생각합니다. 관련 데이터를 짜내기만 하면 됩니다.

Comm을 사용해 보았지만 실제로는 내가 찾고 있는 솔루션을 제공하지 않습니다...

편집: 다음 단계는 col2의 값이 FileB(abs val)의 해당 값의 절반보다 크거나 같은지 확인하는 것이므로 다른 열 데이터도 유지해야 합니다. 나는 그것들만을 끝까지 간직하고 싶다. 예를 들어, 모든 명령을 실행한 후 이러한 조건과 일치하는 FileA의 col1 데이터만 인쇄해야 합니다. 위의 현재 예에서는 아무것도 인쇄되지 않지만 더 큰 파일에서는 1000줄의 내용이 인쇄됩니다.

답변1

$ join FileA FileB | awk '{ x = $2; y = $3 } y < 0 { y = -y } x >= y/2 { print $1, $2 }'

샘플 데이터가 주어지면 join이는 다음과 같은 결과를 가져올 것입니다.

103445 -630 -210
103572 -638 1424

첫 번째 열은 조인 필드이고, 두 번째 열은 from 이며 FileA, 마지막 열은 from 입니다 FileB. 이 단계에서는 두 개의 파일을 정렬해야 합니다.

그런 다음 코드는 awk마지막 두 열의 값을 합계로 선택하고 x음수인 경우 y이를 무효화합니다 . 처음 두 열을 출력하는 y경우 (이 열은 에서 제공됨 )x >= y/2FileA

awk비트는 다음과 같이 단축될 수 있습니다.

awk '$3 < 0 { $3 = -$3 } $2 >= $3/2 { print $1, $2 }'

그러나 $3나중에 이 값을 출력하기로 결정하면 필요하지 않은 내용이 수정됩니다 $0.

관련 정보