첫 번째 열과 동일한 패턴을 사용하여 file1의 하위 집합을 추출하고 두 번째 열 값을 file2와 비교합니다.

첫 번째 열과 동일한 패턴을 사용하여 file1의 하위 집합을 추출하고 두 번째 열 값을 file2와 비교합니다.

파일 1

a   1
a   2
a   3
b   2
b   3
b   4
b   5

파일 2

2
4
3
1

산출

a   1
a   2
a   3

파일 1에서 "b" 값을 제거하려면 두 번째 열(파일 1의 "5")에 있는 "b"에 해당하는 값 중 하나가 파일 2에 없기 때문에 "a" 값만 유지하면 됩니다. .

그래서 기본적으로 동일한 패턴의 첫 번째 열을 기반으로 file1의 하위 집합을 만들고 해당 두 번째 열 값을 사용하여 인덱스 배열을 만들고 두 번째 파일에서 검색해야 합니다. 두 번째 파일에서 값이 누락된 경우 전체 하위 집합을 삭제하고 싶습니다.

file1의 두 번째 열 값이 file2의 첫 번째 열 값과 일치하는 행을 추출할 수 있습니다. 첫 번째 열과 배열 인덱스를 기반으로 하위 집합을 만드는 방법을 알아보려고 합니다.

당분간 저는 이 작업을 두 가지 간단한 단계로 수행했습니다.

첫 번째 단계:

awk '{print $1}' file1| sort | uniq -c | sed 's/^ *//g'| sed 's/ /_/g'|sort > file1_modified.txt
output:
3_a
4_b

2단계: file2의 값이 pf file1의 두 번째 열에 있는 경우 file1의 줄을 인쇄하고 file1_modified.txt와 비교하여 일치하는 줄을 얻은 다음 출력을 사용하여 file1에서 줄을 추출합니다.

awk 'FNR==NR{a[$1];next}($2 in a){print}' file2 file1|awk '{print $1}'| sort | uniq -c | sed 's/^ *//g'| sed 's/ /_/g'|sort|comm -12 - file1_modified.txt| awk '{FS="_"}{print $2}'| grep -f - file1
output:
a   1
a   2
a   3

더 나은 방법으로 설명할 수 있기를 바라며 누군가 조언을 제공할 수 있다면 도움이 될 것입니다.

관련 정보