두 개의 파일이 있습니다. File1에는 유전자 상호 작용(유전자 기호)이 있고 다른 File2에는 유전자 기호와 해당 Ensembl ID가 있습니다.
파일 1
GeneA GeneB
GeneA GeneD
GeneC GeneB
파일 2
GeneA Ensembl1
GeneB Ensembl2
GeneC Ensembl3
이제 아래와 같은 출력이 있는 파일 File3을 원합니다.
GeneA Ensembl1 GeneB Ensembl2
GeneA Ensembl1 GeneD NA
GeneC Ensembl3 GeneB Ensembl2
File2에 GeneD가 없어 해당 유전자의 Ensembl ID를 찾을 수 없으면 해당 유전자에 대해 NA가 입력됩니다. 누구든지 구현하도록 도와줄 수 있나요?
답변1
앗해결책:
awk 'NR==FNR{ a[$1]=$2; next }
{ $1=$1 FS (($1 in a)? a[$1]:"NA"); $2=$2 FS (($2 in a)? a[$2]:"NA"); }1' File2 File1
산출:
GeneA Ensembl1 GeneB Ensembl2
GeneA Ensembl1 GeneD NA
GeneC Ensembl3 GeneB Ensembl2
답변2
perl -lane '
@ARGV and $h{$F[0]}=$F[1],next;
print join $", map { $_ , $h{$_} // "NA" } @F;
' File2 File1
결과
GeneA Ensembl1 GeneB Ensembl2
GeneA Ensembl1 GeneD NA
GeneC Ensembl3 GeneB Ensembl2
피복재
- 먼저 File2가 매개변수 목록에서 Perl에 제공되고 그 다음 File1이 제공됩니다.
%h
GeneA, GeneB 등의 키를 사용하여 해시를 구축합니다 . => 값은 File2의 모음입니다. File2를 처리할 때 @ARGV에 요소가 있으므로 스칼라 컨텍스트의 @ARGV는 true를 반환합니다.- File1을 읽는 동안 @ARGV는 0으로 줄어들므로 첫 번째 줄은 평가되지 않습니다. 두 번째 줄은 적절한 매핑 변환 후 공백으로 연결된 필드를 인쇄합니다($"의 기본값은 공백입니다).