두 개의 텍스트 파일을 병합하는 방법

두 개의 텍스트 파일을 병합하는 방법

이런 텍스트 파일이 있어요

sp|QBWMM1-2|PDCI_Mouse(741-770) 8864=mil (25/2.20/2.50)
sp|Pm345|Hisf_Mouse(613-640) 776=mil (25/2.20/2.50)
sp|P0065-2|Hila_Mouse(344-393)6543=mil (25/2.20/2.50)
sp|Q90081|Rira_Mouse(47-72) 7365=mil (25/2.20/2.50)
sp|QQQQQ1|Ubs_Mouse(162-190) 22=mil (25/2.20/2.50)

이와 같은 다른 텍스트 파일이 있습니다

sp|QBWMM1-2|PDCI_Mouse complex subunit alpha OS=Mouse OX=90009 PE=1 SV=1
sp|Pm345|Hisf_Mouse Heat shock 70 kDa protein 1A OS=Mouse OX=90009 PE=1 SV=1
sp|O15012|SCCC_Mouse Protein transport protein Sec16A OS=MOUSE OX=90009 PE=1 SV=4
sp|P0065-2|Hila_Mouse Filamin-A OS=MOUSE OX=90009 PE=1 SV=4
sp|Q90081|Rira_Mouse Alpha-actin OS=Mouse OX=90009 PE=1 SV=2
sp|QQQQQ1|Ubs_Mouse Tubulin alpha8 chain OS=Mouse OX=90009 PE=1 SV=1
sp|QQQQQ2|Ubs_Mouse Plasta-3 OS=Mouse OX=90009 PE=1 SV=4

병합해서 비슷한 부분은 유지하고 나머지는 합치고 싶습니다. 예를 들어 텍스트 1과 텍스트 2에서 다음은 유사합니다.

sp|QBWMM1-2|PDCI_Mouse(741-770) 8864=mil (25/2.20/2.50)
sp|QBWMM1-2|PDCI_Mouse complex subunit alpha OS=Mouse OX=90009 PE=1 SV=1

첫 번째 부분이 가장 중요합니다. 비슷한 문자열을 가지고 있기 때문에 유사한 것으로 간주됩니다.sp|QBWMM1-2|PDCI_Mouse

그러면 나는 그것들을 하나로 모으고 싶습니다.

sp|QBWMM1-2|PDCI_Mouse complex subunit alpha OS=Mouse OX=90009 PE=1 SV=1 (741-770) 8864=mil (25/2.20/2.50)

따라서 출력은 다음과 같습니다.

sp|QBWMM1-2|PDCI_Mouse complex subunit alpha OS=Mouse OX=90009 PE=1 SV=1 (741-770) 8864=mil (25/2.20/2.50)
sp|Pm345|Hisf_Mouse Heat shock 70 kDa protein 1A OS=Mouse OX=90009 PE=1 SV=1 (613-640) 776=mil (25/2.20/2.50))
sp|O15012|SCCC_Mouse Protein transport protein Sec16A OS=MOUSE OX=90009 PE=1 SV=4
sp|P0065-2|Hila_Mouse Filamin-A OS=MOUSE OX=90009 PE=1 SV=4 (344-393)6543=mil (25/2.20/2.50)
sp|Q90081|Rira_Mouse Alpha-actin OS=Mouse OX=90009 PE=1 SV=2 47-72) 7365=mil (25/2.20/2.50)
sp|QQQQQ1|Ubs_Mouse Tubulin alpha8 chain OS=Mouse OX=90009 PE=1 SV=1 (162-190) 22=mil (25/2.20/2.50)
sp|QQQQQ2|Ubs_Mouse Plasta-3 OS=Mouse OX=90009 PE=1 SV=4

답변1

file1이것이 첫 번째 텍스트 파일이고 두 번째 텍스트 파일인 경우 file2Bash에서 작동합니다.

join -a 1 <(sort -k1,1 file2) <(sed -E -e 's/([^\s])\(/\1 (/' file1 | sort -k1,1)

Join<(...)두 개의 파일을 인수로 사용하여 호출됩니다. 이는 (실제로는 익명 파이프 또는 FIFO) 위 명령 형식의 두 프로세스 대체 결과입니다.

두 번째 매개변수 파일에는 올바른 공백으로 구분된 조인 필드를 생성하기 위해 file1각 행의 첫 번째 매개변수 앞에 공백을 삽입하는 수정된 버전이 포함되어 있습니다 . 두 매개변수 파일의 내용은 결합 필드(예: 필드 1)에 따라 정렬됩니다. 예를 들어 이 옵션은 (즉, 첫 번째 매개변수 파일) 의 페어링할 수 없는 행도 출력되도록 합니다.(sedjoin-a 1file2

관련 정보