탭으로 구분된 테이블이 있습니다(표 1).
a b c
A 0.5 0.2 0
B 0 0.5 0.4
C 1 0.3 0.4
D 0.2 0 0.2
탭으로 구분된 파일(File1)
A 0.3
B 1
C 0.5
D 0.5
Table1의 각 행(예: 행 A(0.5 0.2 및 0))에 있는 각 숫자와 File1의 동일한 행(행 A(0.3))에 있는 숫자를 곱하고 싶습니다. 따라서 행 A의 경우 0.5 * 0.3, 0.2 * 0.3 및 0 * 0.3이 됩니다.
원하는 출력:
a b c
A 0.15 0.06 0
B 0 0.5 0.4
C 0.5 0.15 0.2
D 0.1 0 0.1
이를 명확히 하기 위해 다음은 예제 테이블입니다. 이 문자는 열/행 이름을 나타내는 변수입니다. 수백 개의 열과 행이 있을 수 있습니다. 실제 열/행 이름에는 숫자가 포함될 수 있으며 스크립트는 이러한 숫자를 변경해서는 안 됩니다. 예를 들어 행 "A"의 이름은 "ABC123"일 수 있습니다.
도움을 주셔서 감사합니다.
답변1
한 가지 방법은 다음과 같습니다.
$ awk -F"\t" '
{
if(NR==FNR){
a[$1]=$2;
}
else{
if(FNR==1){print; next}
printf "%s",$1;
for(i=2;i<=NF;i++){
printf "\t%0.2f",$i*a[$1]
}
printf "\n"
}
}' table2 table1
a b c
A 0.15 0.06 0.00
B 0.00 0.50 0.40
C 0.50 0.15 0.20
D 0.10 0.00 0.10