유기체를 나타내는 코드(예: ctc, nmg, nml)가 포함된 탭으로 구분된 파일이 있습니다(File_1).
522 ctc:CTC00972 - 506 3.20E-138
522 nmg:Nmag_3027 - 561 4.70E-73
522 nml:Namu_3564 - 566 1.80E-146
또한 코드를 유기체 이름(File_2)에 연결하는 탭으로 구분된 파일도 있습니다.
ctc Clostridium_tetani_E88
nla Neisseria_lactamica
nmg Natrialba_magadii
File_1의 코드를 File_2의 유기체 이름으로 어떻게 바꾸나요?
원하는 출력:
522 Clostridium_tetani_E88:CTC00972 - 506 3.20E-138
522 Natrialba_magadii:Nmag_3027 - 561 4.70E-73
522 Neisseria_lactamica:Namu_3564 - 566 1.80E-146
전체 데이터 세트에는 이러한 코드가 수천 개 있으며 File_1과 File_2의 유기체 순서가 다르다는 점을 명심하세요.
답변1
이는 실제로 "한 파일에서 조회 테이블을 작성하여 다른 파일을 처리할 때 사용"의 변형일 뿐이며 조회 키가 두 번째 필드와 분리되어야 한다는 단점이 있습니다. awk
예를 들어 다음과 같이 할 수 있습니다.
awk '
BEGIN{OFS=FS="\t"}
NR==FNR {
a[$1]=$2; next
}
{
split($2,b,":");
if (b[1] in a) $2 = a[b[1]]":"b[2]
} 1' File_2 File_1
답변2
이 작업을 수행해야 합니다 sed
.
sed '/^[a-z]*[[:cntrl:]].*/{s/[[:cntrl:]]/###/;H;d;}
G
s/\([a-z]*\)\(:.*\n\)\1###\([^[:cntrl:]]*\)/\3\2/
P
d' file_2 file_1
이것은 입양이다이 일반적인 솔루션. 작동 방식에 대한 설명은 여기를 참조하세요.
답변3
앗방법:
awk 'NR==FNR{a[$1]=$2;next}$2 in a{$2=a[$2]":"$3;$3=""}1' File_2 FS="[ |:]" File_1
산출:
522 Clostridium_tetani_E88:CTC00972 - 506 3.20E-138
522 Natrialba_magadii:Nmag_3027 - 561 4.70E-73
522 nml:Namu_3564 - 566 1.80E-146
두 입력 파일 간에 nml
및 코드가 일치하지 않습니다 .nla