- 论坛徽章:
- 1
|
回复 1# newfinder - awk -vc=0 '{if(NR==FNR)b[$0]=1;elseb[$0]=0;c++;state[$0]+=c;if(NR>1){split($0,n,/[:\-\ ]/);for(i in state){split(i,m,/[:\-\ ]/);if(m[2]==n[2]&&state[i]<state[$0]){if(!(m[3]>n[4]||m[4]<n[3])){if(state[i]>=0)state[i]=0;state[$0]=0;if(m[1]!=n[1])state[i]=state[$0]=-1;}}}}}END{print "data1_diff:";for(i in state){if(state[i]>0&&b[i])print i;}print "data2_diff:";for(i in state){if(state[i]>0&&!b[i])print i;}print "data_comm:";for(i in state)if(state[i]==0){split(i,k,/[:\ ]/);if(out[k[1],k[2]]==0){out[k[1],k[2]]=i}else{split(out[k[1],k[2]],l,/[:\ ]/);out[k[1],k[2]]=l[1]" "l[2]":"l[3]","k[3]" "l[4]","k[4];}};for(i in out){print out[i]};print "------";for(i in state){if(state[i]<0){if(state[i]<0){split(i,k,/[:\ ]/);if(out2[k[2]]==0){out2[k[2]]=i;}else{split(out2[k[2]],l,/[:\ ]/);str=l[2]":"l[3]","k[3]" "l[4]","k[4];if(k[1]!=l[1])out2[k[2]]=l[1]","k[1]" "str;else out2[k[2]]=l[1]" "str;}}}}for(i in out2)print out2[i];}' testfile testfile1
复制代码- data1_diff:
- name1 range1:7-11 5
- name1 range3:18-22 5
- name2 range1:13-16 4
- name1 range2:18-23 6
- data2_diff:
- name2 range1:26-28 3
- name2 range2:8-9 2
- name2 range1:17-19 3
- data_comm:
- name1 range1:4-6,1-3,1-4 3,3,4
- name1 range2:12-16,10-15 5,6
- name2 range3:3-6,5-9 4,5
- name1 range3:11-15,10-12 5,3
- ------
- name1,name2 range1:21-24,20-25 4,6
- name1,name2 range2:4-6,3-4 3,2
复制代码 吃完饭又想了下。。。。把格式输出了。。。。代码很low,你看看能不能用,文本多了会不会出错。。。。 |
|