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
단일 파일로 출력하고 싶은 것은
- file1과 file2 사이의 모든 공통 라인
- 두 파일 모두에 공통되지 않는 file1의 모든 줄
- 두 파일 모두에 공통되지 않는 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
이는 을 사용하는 솔루션이며 를 사용하는 것과 동일합니다.uniq
join
grep
comm
두 파일에 공통되는 줄은 다음과 같습니다.
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)