file 에 지정된 순서에 따라 whitelist.txt
파일에서 고유 식별 번호를 얻기 위해 파일 번호를 사용하고 싶습니다 . 예:list.txt
whitelist.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.txt
ie에서 2
외부 2p
에 해당 sed
줄을 인쇄하도록 지시하는 2
==> sed -n '2p'
==> 두 번째 줄을 인쇄하도록 변환합니다. , 등 을 포함하는 sed 스크립트를 생성하고(외부 sed에 프로세스 대체를 제공)
의 모든 항목에 대해 동일한 일이 발생하며 list.txt의 해당 행이 인쇄됩니다.whitelist.txt
2p
5p
7p
대안: 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
. 참고: $. 항상 숫자 AND > 0입니다. 이는 우리가$h{$.}
propah 대신 just를 사용하여 벗어날 수 있는 이유입니다.exists $h{$.}
결과
172363
612851
172418
19
72457