완전한 단락을 얻으려면 파일의 줄을 다른 파일의 헤더와 일치시키세요.

완전한 단락을 얻으려면 파일의 줄을 다른 파일의 헤더와 일치시키세요.

두 개의 파일을 사용하여 스크립트를 작성하는 데 도움이 필요합니다. 파일 1은 아미노산을 특정 순서로 나열하고(하나는 다른 순서로, 반복될 수도 있음) 두 번째 파일 2는 각 아미노산 아래에 나열된 기능을 구성합니다. 여기서는 목록 1(파일 1)의 아미노산을 일치시켜 두 번째 파일(파일 2)의 동일한 아미노산 아래에 특성을 나열하고 이를 파일 1에서 언급한 것과 동일한 순서로 출력 파일에 복사하려고 합니다. .

예를 들어 파일 1.txt

    Threonine
    Glutamine
    Alanine
    Asparatate
    Glutamine
    Alanine
    Threonine

파일 2.txt

    [ Alanine ] 
    89.1    13.7    -3.12   -10.09
    [ Asparatate ]  
    133.1   30  -2.43   -10.35
    [ Glutamine ]   
    146.1   42.7    -3.46   -10.23
    [ Threonine ]   
    119.1   28.5    -2.43   -9.99   

내가 원하는 출력은 다음과 같습니다:output.txt

    [ Threonine ]   
    119.1   28.5    -2.43   -9.99
    [ Glutamine ]   
    146.1   42.7    -3.46   -10.23
    [ Alanine ] 
    89.1    13.7    -3.12   -10.09
    [ Asparatate ]  
    133.1   30  -2.43   -10.35
    [ Glutamine ]   
    146.1   42.7    -3.46   -10.23
    [ Alanine ] 
    89.1    13.7    -3.12   -10.09 
    [ Threonine ]   
    119.1   28.5    -2.43   -9.99

단어 대신 숫자를 색인으로 사용하는 awk에서 다음 스크립트를 사용해 보았지만 이 목적으로는 작동하지 않습니다.

awk 'FNR==NR { a[ "\\[ " $1 " \\]" ]; next } /^\[/ { f=0 } { for (i in a) if ($0 ~ i) f=1 } f' file1.txt file2.txt > output.txt

단어에 맞게 작동하도록 스크립트를 수정하는 방법을 모르겠습니다. 내가 어디로 잘못 가고 있는지 알려주고 스크립트를 실행하여 원하는 결과를 얻을 수 있도록 도와주세요.

귀하의 도움에 매우 감사하겠습니다.

미리 감사드립니다.

아샤

답변1

acid를 반복해서 File1.txt+ 1개 행에서 일치하는 모든 행을 찾아야 합니다 File2.txt. 이 작업은 쉽게 수행할 수 있습니다.grep

for acid in $(sed 's/^\s*//' File1.txt)
do
    grep -FA1 "$acid" File2.txt
done > Output.txt

하지만 당신이 원한다면 awk:

awk '
FNR!=NR{
    print "    [",$1,"]"
    print acids[$1]
    next
}
/\[/{
    acid=$2
    next
}
{
    acids[acid]=$0
}' File2.txt File1.txt > Output.txt

답변2

이를 수행하는 빠른 방법은 다음을 사용하는 것입니다.

while read amino_acid
do
    grep -A1 ${amino_acid} File2.txt >> output.txt
done < File1.txt

답변3

그리고 xargs/ grep:

xargs -n1 -I '{}' grep '{}' -A1 File2.txt <File1.txt

설명하다:

  • -n1: xargs가 각 줄에서 명령을 실행하도록 강제합니다.
  • -I '{}': 자리 표시자 설정
  • grep '{}' -A1 File2.txt: 실행할 명령
    • -A1:검색 패턴 다음 줄도 인쇄합니다.
    • File2.txt: 검색 슬롯File2.txt
  • <File1.txt: 입력은File1.txt

관련 정보