여러 행이 있는 테이블에서 행의 각 값에 동일한 정의된 값을 곱합니다.

여러 행이 있는 테이블에서 행의 각 값에 동일한 정의된 값을 곱합니다.

탭으로 구분된 테이블이 있습니다(표 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

관련 정보