#!/usr/bin/awk -f BEGIN { OFS="\t" } # header NR==1 { f=NF $1=$1 #recalc $0 using OFS print next #no further processing } # new patient !(($1 OFS $2) in name_to_idx) { idx_to_name[++idx]=$1 OFS $2 name_to_idx[$1 OFS $2]=idx } 1 { for (i=3; i<=f; i++) { data[name_to_idx[$1 OFS $2],i]+=$i } } END { for (i=1; i<=idx; i++) { printf("%s", idx_to_name[i]) for (j=3; j<=f; j++) printf("%s%s", OFS, data[i,j]?1:0) #just 1 or 0, not actual sum printf("%s",ORS) } }