두 목록 사이의 힘든 grep

두 목록 사이의 힘든 grep

두 개의 다른 txt 파일이 있습니다. "all_E3.txt"라는 첫 번째 항목에는 개체 목록(열)이 포함되어 있으며 해당 목록에는 중복된 개체도 많이 있습니다. "UPS.txt"라는 다른 파일에는 열에 개체 목록이 있으며(중복 없음) 각 개체는 변수(동일한 행과 다른 열, 숫자 또는 "NA")와 연결됩니다.

이 파일에는 "all_E3.txt" 파일에도 개체가 있습니다(단, 이에 국한되지 않음). "ALL_E3.txt"에 있는 모든 개체와 "UPS.txt"에 따른 해당 변수를 포함하는 "output_UPS.txt"라는 다른 파일을 가져오고 싶습니다. 예를 들어:

  • 파일 "all_E3.txt":
    AMFR
    AMFR
    AMFR
    ANAPC11
    CRB
    CRB
    TER
    CAM
    DVDE
    
  • 파일 2 "UPS.txt"
    AMFR 0
    REF 1
    SDRF N.A.
    BHU 3 
    ANAPC11 2
    CRB 2
    YUT 1
    TER 0
    CAM 3
    WERS N.A.
    DVDE 3
    
  • 파일 출력 "output_UPS.txt"
    AMFR 0
    AMFR 0
    AMFR 0
    ANAPC11 2
    CRB 2
    CRB 2
    TER 0
    CAM 3
    DVDE 3
    

다른 조직의 파일을 사용하는 유사한 설정에서 친구의 조언에 따라 다음을 시도했습니다.

for name in ????_?
do
   for file in $name/Pocket_???_$name\.pdb_OUTPUT.txt
   do
      grep -H Exposed $file | uniq
   done
done 

하지만 현재 상황에 적응할 수는 없습니다. 운영체제는 CentOS 7입니다.

누구든지 저를 도와주실 수 있나요? 감사해요.

답변1

awk유효한 대안 이라면 grep다음이 작동합니다.

awk 'NR==FNR{a[$1]=$2} NR>FNR{print $1,a[$1]}' UPS.txt all_E3.txt > output_UPS.txt
  • 그러면 먼저 첫 번째 열과 두 번째 열 사이의 매핑을 읽고 만듭니다 UPS.txt.a
  • 처리가 다음 파일에 도달하면 all_E3.txt( NR전역 행 카운터가 FNR파일별 행 카운터와 다름) 해당 파일의 "첫 번째 열"과 이전에 생성된 맵의 관련 값을 출력합니다. 2열.

출력은 으로 리디렉션됩니다 output_UPS.txt.

관련 정보