파일이 두 개 있어요
파일 A
Aacs 4498.5 778.5 995.5 1263 530
Abracl 2824 19.31 58.45 55.67 33.075
Ackr3 1294.5 19.5 47.5 38.5 4.5
Actb 246564 4472.46 11134.1 12272.6 2228.05
문서 B
chr5 124350754 124353027 Aacs 1639_47_175_59_95
chr5 125140780 125141989 Aacs 920_132_115_65_389
chr5 125148638 125149481 Aacs 357_56_65_48_116
chr1 89576587 89577508 Ackr3 618_804_385_412_1239
chr1 89579859 89582071 Ackr3 1340_429_274_242_611
chr5 142819302 142820142 Actb 614_116_105_58_371
chr5 142821400 142822219 Actb 544_74_97_45_118
FileA의 열 1에 있는 값이 FileB에 존재하는 경우 일치하는 값이 FileB에 여러 번 나타나더라도 FileA의 모든 행 값을 FileB에 추가해야 합니다.
그래서 그 이후로도끼FileA가 FileB에 존재하는 경우 모든 해당 값을 다음과 같이 FileB에 여러 번 추가하고 싶습니다.
chr5 124350754 124353027 Aacs 1639_47_175_59_95 4498.5 778.5 995.5 1263 530
chr5 125140780 125141989 Aacs 920_132_115_65_389 4498.5 778.5 995.5 1263 530
chr5 125148638 125149481 Aacs 357_56_65_48_116 4498.5 778.5 995.5 1263 530
Python에서 pandas를 사용하여 이 작업을 수행할 수 있지만 awk 또는 다른 unix 툴킷을 사용하여 이 작업을 수행하는 방법을 찾고 싶습니다.
답변1
$ awk 'NR==FNR{key=$1; sub(/[^[:space:]]+/,""); a[key]=$0; next} {print $0 a[$4]}' FileA FileB
chr5 124350754 124353027 Aacs 1639_47_175_59_95 4498.5 778.5 995.5 1263 530
chr5 125140780 125141989 Aacs 920_132_115_65_389 4498.5 778.5 995.5 1263 530
chr5 125148638 125149481 Aacs 357_56_65_48_116 4498.5 778.5 995.5 1263 530
chr1 89576587 89577508 Ackr3 618_804_385_412_1239 1294.5 19.5 47.5 38.5 4.5
chr1 89579859 89582071 Ackr3 1340_429_274_242_611 1294.5 19.5 47.5 38.5 4.5
chr5 142819302 142820142 Actb 614_116_105_58_371 246564 4472.46 11134.1 12272.6 2228.05
chr5 142821400 142822219 Actb 544_74_97_45_118 246564 4472.46 11134.1 12272.6 2228.05
출력의 필드를 정렬하려는 경우 다양한 옵션이 있으며 가장 간단한 방법은 다음으로 파이프하는 것입니다 column
.
$ awk 'NR==FNR{key=$1; sub(/[^[:space:]]+/,""); a[key]=$0; next} {print $0 a[$4]}' FileA FileB | column -t
chr5 124350754 124353027 Aacs 1639_47_175_59_95 4498.5 778.5 995.5 1263 530
chr5 125140780 125141989 Aacs 920_132_115_65_389 4498.5 778.5 995.5 1263 530
chr5 125148638 125149481 Aacs 357_56_65_48_116 4498.5 778.5 995.5 1263 530
chr1 89576587 89577508 Ackr3 618_804_385_412_1239 1294.5 19.5 47.5 38.5 4.5
chr1 89579859 89582071 Ackr3 1340_429_274_242_611 1294.5 19.5 47.5 38.5 4.5
chr5 142819302 142820142 Actb 614_116_105_58_371 246564 4472.46 11134.1 12272.6 2228.05
chr5 142821400 142822219 Actb 544_74_97_45_118 246564 4472.46 11134.1 12272.6 2228.05
답변2
다음을 사용하여 두 파일을 간단히 연결할 수 있습니다.가입(1)
join -1 1 -2 4 -o 2.1,2.2,2.3,2.4,2.5,1.2,1.3,1.4,1.5,1.6 FileA FileB
어떤 열을 지정하십시오.-1그리고-2파일 1(FileA)과 2(FileB)를 결합하려고 합니다. 이것-영형예제 출력에 맞게. 출력을 예쁜 열로 표시하려면 출력을 다음으로 파이프하십시오.column -t