다른 열의 식별자와 일치하는 값을 가진 열을 추가합니다.

다른 열의 식별자와 일치하는 값을 가진 열을 추가합니다.

두 개의 파일이 있습니다.

파일 1

hc          Value
cluster0    0.1  
cluster0    0.2  
cluster0    0.3  
cluster1    0.3  
cluster1    0.5  
cluster0    0.8  
cluster2    0.9  
cluster2    0.9  
cluster0    0.0  

파일 2

hc       mean
cluster0 0.35
cluster1 0.4   
cluster2 0.9

다음과 같은 새 테이블을 만들고 싶습니다.

파일 3

hc          Value  mean
cluster0    0.1   0.35 
cluster0    0.2   0.35 
cluster0    0.3   0.35 
cluster1    0.3   0.40 
cluster1    0.5   0.40
cluster0    0.8   0.35 
cluster2    0.9   0.90
cluster2    0.9   0.90
cluster0    0.0   0.35

Bash에서 어떻게 할 수 있나요? 이 작업을 쉽게 수행할 수 있는 명령이 있습니까?

답변1

이는 Awk에서 쉽게 수행할 수 있습니다.

$ awk 'NR==FNR {a[$1] = FNR==1 ? $2 : sprintf("%.2f",$2); next} {print $0,a[$1]}' File2 File1
hc          Value mean
cluster0    0.1   0.35
cluster0    0.2   0.35
cluster0    0.3   0.35
cluster1    0.3   0.40
cluster1    0.5   0.40
cluster0    0.8   0.35
cluster2    0.9   0.90
cluster2    0.9   0.90
cluster0    0.0   0.35

단계는 다음과 같습니다.

  • 첫 번째 명명된 파일( ) NR==FNR의 행 에 대해 첫 번째 열 값으로 인덱싱되고 두 번째 열(평균) 값을 포함하는 연관 배열(또는 해시)을 만듭니다. 평균을 부동 소수점 형식으로 표시할 필요가 없는 경우 이 단계를 단순화하고 NR==FNR {a[$1] = $2}모든 값(제목 포함)을 문자열로 처리할 수 있습니다.

  • 그렇지 않으면 첫 번째 열과 인덱스가 일치하는 배열의 값이 뒤에 오는 행을 인쇄합니다.

답변2

아래 스크립트를 사용해 보세요. 잘 작동합니다.

주문하다

for i in `cat file2| awk '{print $1}'`; do p=`grep "$i" file2| awk '{print $2}'`; awk -v i="$i" -v p="$p" '$1 == i {$3=p;print $0}' file1; done|sed '1i hc      Value  mean'

산출

hc          Value  mean
cluster0    0.1   0.35 
cluster0    0.2   0.35 
cluster0    0.3   0.35 
cluster1    0.3   0.40 
cluster1    0.5   0.40
cluster0    0.8   0.35 
cluster2    0.9   0.90
cluster2    0.9   0.90
cluster0    0.0   0.35

관련 정보