파일 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(단지 숫자 2 아님 file.txt)이 포함된 입력 샘플( )을 기반으로 합니다.

답변1

수정된 데이터를 기반으로 다음 작업을 시도해 보세요.

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

그러면 해당 줄을 외부적으로 인쇄 ==> 같음 ==> 두 번째 줄을 인쇄하도록 나타 내기 위해 whitelist.txt파일 항목이 ie로 변환 됩니다 . 의 모든 항목에 대해 동일한 일이 발생합니다 . , 등을 포함하는 sed 스크립트(프로세스 대체를 통해 제공되는 외부 sed)를 만들고 list.txt 의 해당 행을 인쇄합니다.22psed2sed -n '2p'
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.txt이는 Perl코드에 전달되어야 하는 첫 번째 매개변수입니다. qx[]연산자는 연산자일 뿐이라는 점에 유의하십시오 backquote.

  • 그런 다음 두 번째 인수를 사용하여 줄을 인쇄합니다. 즉, list.txt줄 번호는 입니다 hash %h. 참고: $.는 항상 숫자이고 > 0이므로 $h{$.}propah 대신 사용할 수 있습니다.exists $h{$.}

결과

172363
612851
172418
19
72457

관련 정보