두 파일의 공통 라인과 두 파일의 공통 라인을 하나의 출력 파일로 출력합니다.

두 파일의 공통 라인과 두 파일의 공통 라인을 하나의 출력 파일로 출력합니다.

2개의 텍스트 파일이 있습니다. 이름을 file1.txt 및 file2.txt로 지정하겠습니다.

file1.txt는 다음과 같습니다

chr10   181144  225933
chr10   181243  225933
chr10   181500  225933
chr10   226069  255828
chr10   255989  267134
chr10   255989  282777
chr10   267297  282777
chr10   282856  283524
chr10   283618  285377
chr10   285466  285995

file2.txt는 다음과 같습니다

chr10   181144  225933
chr10   181243  225933
chr10   181500  225933
chr10   255989  282777
chr10   267297  282777
chr10   282856  283524
chr10   375542  387138
chr10   386930  387138
chr10   387270  390748
chr10   390859  390938
chr10   391051  394580
chr10   394703  395270

단일 파일로 출력하고 싶은 것은

  1. file1과 file2 사이의 모든 공통 라인
  2. 두 파일 모두에 공통되지 않는 file1의 모든 줄
  3. 두 파일 모두에 공통되지 않는 file2의 모든 줄입니다.

나는 이것을 하기 위해 Perl 스크립트를 작성했지만 명령줄이나 더 쉬운 방법이 있을 것이라고 확신합니다.

답변1

두 파일에 공통되는 줄은 다음과 같습니다.

comm -12 file1.txt file2.txt > results.txt

file1.txt와 관련된 줄을 추가합니다.

comm -23 file1.txt file2.txt >> results.txt

file2.txt와 관련된 줄을 추가합니다.

comm -13 file1.txt file2.txt >> results.txt

파일이 아직 정렬되지 않은 경우, 예를 들어 쉘이 프로세스 대체를 지원하는 경우 미리 정렬해야 합니다.

comm -12 <(sort file1.txt) <(sort file2.txt)

등.

답변2

하나 있다의사소통작업을 수행하라는 명령입니다. 하지만 다른 표준 도구(예 grep: sort이는 을 사용하는 솔루션이며 를 사용하는 것과 동일합니다.uniqjoingrepcomm

두 파일에 공통되는 줄은 다음과 같습니다.

grep -xF -f file1 file2

comm -12 <(sort -u file1) <(sort -u file2)

다음 줄에만 file1:

grep -vxF -f file2 file1

comm -23 <(sort -u file1) <(sort -u file2)

다음 줄에만 file2:

grep -vxF -f file1 file2

comm -13 <(sort -u file1) <(sort -u file2)

관련 정보