亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: shell [打印本頁]

作者: biobaby    時間: 2015-05-26 20:14
標題: shell
chr1    11947   12223   TC01000001.hg.1 +
chr1    12613   12646   TC01000001.hg.1 +
chr1    12646   12697   TC01000001.hg.1 +
chr1    13228   13392   TC01000001.hg.1 +
chr1    13492   14387   TC01000001.hg.1 +
chr1    29555   30037   TC01000002.hg.1 +
chr1    30273   30366   TC01000002.hg.1 +
chr1    30367   30497   TC01000002.hg.1 +
chr1    30506   30563   TC01000002.hg.1 +
大家好,我有一個如上的文件,第二三列分別是起始和終止位置,可以看到第四列有重復的,現(xiàn)在我想按如下要求輸出:

第1,4,5列可正常輸出,對于同一個TC(第四列)輸出其最小第二列最大第三列。意思就是比如TC01000001.hg.1    輸出成:
chr1    11947   14387   TC01000001.hg.1 +

不知道有沒有表達清楚。
謝謝
作者: zxy877298415    時間: 2015-05-26 20:47
  1. awk '{ if(NR==1) {a=$2;b=$3;c=$4} if($4==c) {b=$3}  else  {print $1,a,b,c,$5;a=$2;b=$3;c=$4}}END{print $1,a,b,c,$5}' file
  2. chr1 11947 14387 TC01000001.hg.1 +
  3. chr1 29555 30563 TC01000002.hg.1 +
復制代碼
回復 1# biobaby



   
作者: zsszss0000    時間: 2015-05-26 21:39
  1. awk '{if(str!=$4){str=$4;min[$4]=$2;max[$4]=0;};a[$4]++;if($2<min[$4])min[$4]=$2;if($3>max[$4])max[$4]=$3}END{for( i in a)print i,max[i],min[i]}' file  
復制代碼

作者: songyc_2015    時間: 2015-05-26 22:00
本帖最后由 songyc_2015 于 2015-05-26 22:17 編輯

回復 1# biobaby
  1. awk '{a[$1,$4]=length(a[$1,$4])?a[$1,$4]:$2;a[$1,$4]=a[$1,$4]<=$2?a[$1,$4]:$2;b[$1,$4]=b[$1,$4]>=$3?b[$1,$4]:$3;c[$1,$4]=$NF}END{for(s in a){split(s,d,SUBSEP);print d[1],a[s],b[s],d[2],c[s]}}' file
  2. awk 'FNR!=1&&(a!=$1||d!=$4){print a,b,c,d,e;a=$1;d=$4;b=$2;c=$3}{a=$1;b=b==0?$2:b;b=b<=$2?b:$2;c=c>=$3?c:$3;d=$4;e=$NF}END{print a,b,c,d,e}' file
復制代碼

作者: reyleon    時間: 2015-05-27 11:55

gawk 4.0+
  1. awk '{a[$4][NR]=$2;b[$4][NR]=$3}END{for(i in a){asort(a[i],min);m=asort(b[i],max);print $1,min[1],max[m],i,$NF}}' file
復制代碼

作者: biobaby    時間: 2015-05-27 13:34
問題已解決,非常感謝大家。!
回復 1# biobaby


   
作者: lifayi2008    時間: 2015-05-27 16:13
  1. awk '{if(a[$4]==0){a[$4]=$2}else{a[$4]=a[$4]<$2?a[$4]:$2};b[$4]=b[$4]>$3?b[$4]:$3}END{for(i in a)printf "chr1\t%d\t%d\t%s\t+\n",a[i],b[i],i}' test.txt
復制代碼

作者: stupid_lee    時間: 2015-05-27 17:15
  1. awk '{a[$4]=$4;b[a[$4]]=b[a[$4]]?b[a[$4]]:$2;b[a[$4]]=b[a[$4]]<$2?b[a[$4]]:$2;c[a[$4]]=c[a[$4]]<$3?$3:c[a[$4]];d[a[$4]]=$1;e[a[$4]]=$5}END{for(i in a)print d[a[i]],b[a[i]],c[a[i]],i,e[a[i]]}'
復制代碼

作者: biobaby    時間: 2015-06-09 10:56
謝謝 非常感謝
回復 8# stupid_lee


   




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2