내 Linux 컴퓨터에는 두 개의 파일이 있습니다. 첫 번째 "list.txt"에는 개체 목록(2649개 개체)이 포함되어 있고, 두 번째 "list_interactors.txt"에는 이전 목록(719개 개체)의 일부 개체가 포함된 더 짧은 목록이 포함되어 있으며, 각 개체에는 일부 관련 변수가 나열되어 있습니다. 다른 개체에서는. "list_interactors" 파일에 있는 모든 개체(2649)의 목록과 특정 개체의 관련 변수를 가져오고 싶습니다.
예:
문서list.txt
6tyr_A_002__________
7yer_2_009__________
3erf_1_001__________
2dr5_D_2-3__________
문서list_interactors.txt
6tyr_A_002__________ 6tyr1_B QRT54R AAAAA
3erf_1_001__________ 3erf2_B QAEF6R XXXXX
output.txt
6tyr_A_002__________ 6tyr1_B QRT54R AAAAA
7yer_2_009__________
3erf_1_001__________ 3erf2_B QAEF6R XXXXX
2dr5_D_2-3__________
나는 프로그래밍 언어에 그다지 실용적이지 않습니다. 이 스크립트에서 grep 함수를 사용하려고 합니다.
grep -f list.txt list_interactors.txt
그러나 출력은 "list_interactors.txt" 파일과 유사한 파일입니다.
저 좀 도와 주 시겠어요?
답변1
$ join -a 1 <( sort list.txt ) <( sort list_interactors.txt )
2dr5_D_2-3__________
3erf_1_001__________ 3erf2_B QAEF6R XXXXX
6tyr_A_002__________ 6tyr1_B QRT54R AAAAA
7yer_2_009__________
join
이는 두 파일 간의 관계형 JOIN 작업을 수행하는 데 사용됩니다 . 기본적으로 첫 번째 필드가 조인 키로 사용됩니다.
이 -a 1
옵션을 사용하면 join
두 번째 파일에 일치하는 항목이 없더라도 첫 번째 파일의 모든 행이 출력됩니다("왼쪽 조인" 수행).
입력 데이터를 join
정렬해야 하며, sort
명령줄에서 두 개의 프로세스 대체를 통해 각 파일을 개별적으로 호출하여 정렬해야 합니다. 파일을 미리 정렬하도록 선택할 수도 있습니다.
-t $'\t'
데이터가 탭으로 구분된 경우 명령 시작 부분에 매개 변수를 추가해야 할 수도 있습니다 join
. 이렇게 하면 출력에 기존 탭 구분 기호가 유지됩니다.
>output.txt
출력을 파일에 저장하려면 명령 끝에 추가하여 출력을 리디렉션합니다.
답변2
계속 정렬하려면 다음을 사용할 수 있습니다 awk
.
awk '
FNR==NR {s[$1]=$0}
FNR!=NR {if(s[$1]) print s[$1]; else print $0}
' list_interactors.txt list.txt
산출:
6tyr_A_002__________ 6tyr1_B QRT54R AAAAA
7yer_2_009__________
3erf_1_001__________ 3erf2_B QAEF6R XXXXX
2dr5_D_2-3__________
답변3
$ awk 'NR==FNR{a[$1]=$0; next} {print ($1 in a ? a[$1] : $0)}' list_interactors.txt list.txt
6tyr_A_002__________ 6tyr1_B QRT54R AAAAA
7yer_2_009__________
3erf_1_001__________ 3erf2_B QAEF6R XXXXX
2dr5_D_2-3__________
답변4
Perl oneliner는 또한 다음을 수행할 수 있습니다:
$ perl -ane ' { chomp;$s{$F[0]}=$_; } END { print "$s{$_}\n" for sort(keys(%s)) }' list.txt list_interactors.txt
2dr5_D_2-3__________
3erf_1_001__________ 3erf2_B QAEF6R XXXXX
6tyr_A_002__________ 6tyr1_B QRT54R AAAAA
7yer_2_009__________