2016-06-03 2 views
1

특정 필드를 합산하여 같은 이름을 가진 줄을 축소하려고합니다. 다른 필드에서도 다른 ID가 있는지 확인하고 싶습니다. .의 경우 예를 들어, 내 파일은 다음과 같습니다 :awk를 사용하여 두 개의 다른 필드를 기반으로 열 합계

F1 F2 F3 F4 F5 
1 A_1 1 B_1 4 
2 A_1 2 B_1 5 
3 A_2 4 B_1 2 
4 A_3 3 B_2 4 
5 A_3 2 B_2 2 
6 A_3 1 B_2 1 
7 A_4 2 B_2 2 

내가 다음과 같이 F5와 F3를 요약하기 위해 F4 값과 F2 값을 확인하려면 : 지금까지

1 A_1 3 B_1 9 
3 A_2 4 B_1 2 
6 A_3 6 B_2 7 
7 A_4 2 B_2 2 

를, 내가 시도했습니다 이 :

awk 'BEGIN{OFS=FS="\t"}FNR==NR{a[$4]+=$5;next}; {print $0,a[$4]}' \ 
dummy.txt dummy.txt |sort -k 4,4 -u 

저를 준다 :

1  A_1  1  B_1  4  11 
4  A_3  3  B_2  4  9 

어떻게 병합하기 전에 F2도 고려할 수 있도록 이것을 수정할 수 있습니까? 나는 awk를 선호하지만 다른 솔루션도 환영합니다!

답변

2

이 GNU awk 명령을 사용할 수 있습니다

awk 'BEGIN { 
    FS=OFS="\t" 
    PROCINFO["sorted_in"] = "@ind_num_asc" 
} 
{ 
    k=$2 SUBSEP $4 
} 
!(k in c1) { 
    c1[k]=$1 
    c2[k]=$2 
    c4[k]=$4 
} 
{ 
    s3[k]+=$3 
    s5[k]+=$5 
} 
END { 
    for (i in s3) 
     print c1[i], c2[i], s3[i], c4[i], s5[i] 
}' file 

1 A_1 3 B_1 9 
3 A_2 4 B_1 2 
4 A_3 6 B_2 7 
7 A_4 2 B_2 2 
+1

감사합니다 많이! 예, 완벽하게 작동합니다! – arnstrm

관련 문제