두 개의 파일을 찾아 두 번째 파일에서 공통 항목을 제거하는 방법

두 개의 파일을 찾아 두 번째 파일에서 공통 항목을 제거하는 방법

비슷한 이름과 확장자를 가진 많은 파일이 포함된 여러 하위 디렉터리가 있는 기본 디렉터리가 있습니다. 두 개의 파일을 찾은 다음 두 번째 파일에서 공통 항목을 제거하고 싶습니다.

다음 명령을 실행해 보았습니다.

awk 'NR==FNR{a[$1]++;next;}!($2 in a)' file1_comma_splited_newsort.txt file2_comma_splited_snp.txt >> output.txt 

awk명령은 파일 1의 첫 번째 열과 파일 2의 두 번째 열을 비교하고 파일 2의 두 번째 열에서 중복된 항목을 제거합니다. 이 명령을 실행한 후 원하는 출력을 얻습니다. 하지만 하위 디렉터리 내의 많은 파일에 대해 이 명령을 실행해야 합니다. 그러기 위해서는 find 명령어를 이용해서 이 두 파일을 찾아 위 awk명령어에 넣고 싶은데 가능할까요?

내 디렉터리에 다음 파일이 포함되어 있다고 생각하세요.

main directory file1_comma_splited_newsort.txt 
sub-directory1 file2_comma_splited_snp.txt
sub-directory2 file3_comma_splited_snp.txt 
sub-directory3 file4_comma_splited_snp.txt
sub-directory4 file5_comma_splited_snp.txt
sub-directory5 file6_comma_splited_snp.txt
sub-directory6 file7_comma_splited_snp.txt
sub-directory7 file8_comma_splited_snp.txt
sub-directory8 file9_comma_splited_snp.txt

모든 하위 디렉터리 파일의 열에 존재하는 중복 항목을 제거할 수 있도록 1st모든 하위 디렉터리 파일을 기본 디렉터리 파일의 열과 file1_comma_splited_newsort.txt하나씩 비교 해야 합니다 .2nd

답변1

나무가 이렇게 생겼다고 가정해 보세요

main
|--maindata.txt
|--sub
   |--subdata1.txt
   |--subdata2.txt

그리고 당신은 cdw로 메인 디렉토리에 있습니다. 이것은 bash스크립트를 통해 수행될 수 있습니다(원한다면 한 줄짜리 스크립트로도 가능합니다).

#!/bin/bash
for file in sub/* ; do
    awk '{actions}' maindata.txt "$file" >> "$file"_differences
done

이는 단순히 하위 디렉터리의 모든 파일을 반복하고 하위 디렉터리의 각 파일에 대한 차이점이 포함된 파일을 생성합니다.

관련 정보