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
(단지 숫자 2 아님 file.txt
)이 포함된 입력 샘플( )을 기반으로 합니다.
답변1
수정된 데이터를 기반으로 다음 작업을 시도해 보세요.
$ sed -nf <(sed 's/.*/&p/g' whitelist.txt) list.txt >newfile.txt
그러면 해당 줄을 외부적으로 인쇄 ==> 같음 ==> 두 번째 줄을 인쇄하도록 나타 내기 위해 whitelist.txt
파일 항목이 ie로 변환 됩니다 . 의 모든 항목에 대해 동일한 일이 발생합니다 . , 등을 포함하는 sed 스크립트(프로세스 대체를 통해 제공되는 외부 sed)를 만들고 list.txt 의 해당 행을 인쇄합니다.2
2p
sed
2
sed -n '2p'
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
. 참고: $.는 항상 숫자이고 > 0이므로$h{$.}
propah 대신 사용할 수 있습니다.exists $h{$.}
결과
172363
612851
172418
19
72457