파일 A의 숫자를 사용하여 파일 A에 지정된 순서에 따라 파일 B에서 고유 ID를 얻습니다.

파일 A의 숫자를 사용하여 파일 A에 지정된 순서에 따라 파일 B에서 고유 ID를 얻습니다.

file 에 지정된 순서에 따라 whitelist.txt파일에서 고유 식별 번호를 얻기 위해 파일 번호를 사용하고 싶습니다 . 예:list.txtwhitelist.txt

$ cat whitelist.txt:  
2  
5  
7  
10   
11
(+8,000 more lines)

$ cat list.txt  
2  
172363  
14  
17  
612851  
172414  
172418  
172419  
172424  
19  
72457  
(+ 150,000 more lines)

새 파일로 리디렉션할 수 있도록 다음을 수행합니다.

$ cat newfile.txt  
172363  
612851  
172418  
19   
72457  
(+8,000 more lines)

참고: 이 질문은 수정되었습니다. 2017년 5월 5일 이전의 아래 답변은 list.txt형식이 (예: 첫 번째 행) >CLocus_2_Sample_(숫자 2만이 아닌)이고 파일 이름이 file.fa(아님 )인 입력 샘플( )을 기반으로 했습니다 file.txt.

답변1

수정된 데이터를 바탕으로 다음과 같이 시도해 보세요.

$ sed -nf <(sed 's/.*/&p/g' whitelist.txt) list.txt >newfile.txt

이는 파일의 항목을 whitelist.txtie에서 2외부 2p에 해당 sed줄을 인쇄하도록 지시하는 2==> sed -n '2p'==> 두 번째 줄을 인쇄하도록 변환합니다. , 등 을 포함하는 sed 스크립트를 생성하고(외부 sed에 프로세스 대체를 제공)
의 모든 항목에 대해 동일한 일이 발생하며 list.txt의 해당 행이 인쇄됩니다.whitelist.txt2p5p7p

대안: whitelist.txt를 사전 처리합니다.

sed 's/.*/&p/g' whitelist.txt >whitelist2.txt  #or sed -i '....' whitelist.txt to overwrite whitelist.txt
sed -nf whitelist2.txt list.txt # you can redirect output to >newfile.txt

답변2

최신 개정판에 대한 답변:

awk 'NR==FNR{z[$1]; next}FNR in z' whitelist.txt list.txt >newfile.txt

답변3

당신이 말하는 새로운 사양을 사용하면 이를 수정해야 합니다.

perl -e '
   $h{s/\n//r}++ for qx[cat ${\+shift}];
   $h{$.} && print while <>;
' whitelist.txt list.txt

설명

  • 먼저 코드 에 전달되어야 하는 첫 번째 인수인 파일 hash %h의 내용을 사용하여 채웁니다 . 연산자는 연산자일 뿐이라는 점에 유의하십시오 .whitelist.txtPerlqx[]backquote

  • 그런 다음 두 번째 인수, 즉 list.txt줄 번호가 의 멤버인 파일의 줄을 인쇄합니다 hash %h. 참고: $. 항상 숫자 AND > 0입니다. 이는 우리가 $h{$.}propah 대신 just를 사용하여 벗어날 수 있는 이유입니다.exists $h{$.}

결과

172363
612851
172418
19
72457

관련 정보