Chinaunix

标题: 求助:如果某行第$4+$5>100,则删除第一列相同的所有行,怎么做? [打印本页]

作者: 56836430    时间: 2013-08-10 03:17
标题: 求助:如果某行第$4+$5>100,则删除第一列相同的所有行,怎么做?
例子:
gi|270140093|gb|BT107045.1|     23      +       18      2       CG      CGG
gi|270140093|gb|BT107045.1|     39      +       8       54      CHH     CAA
gi|270140093|gb|BT107045.1|     53      +       0       86      CHH     CCT
gi|270140093|gb|BT107045.1|     54      +       1       86      CHH     CTT
gi|270140093|gb|BT107045.1|     58      +       12      78      CHH     CAA
gi|270140093|gb|BT107045.1|     76      +       84      23      CG      CGG
gi|270140093|gb|BT107045.1|     90      +       2       111     CHH     CCT
gi|270140093|gb|BT107045.1|     136     +       0       96      CHH     CTC
gi|270140093|gb|BT107045.1|     138     +       1       87      CHH     CTT
gi|270140093|gb|BT107045.1|     147     +       2       95      CHH     CAT
gi|270140093|gb|BT107045.1|     169     +       156     60      CHH     CAA
gi|270140093|gb|BT107045.1|     183     +       3       262     CHH     CCC
gi|270140093|gb|BT107045.1|     184     +       3       266     CHH     CCT
gi|270140093|gb|BT107045.1|     185     +       7       266     CHH     CTA
gi|270140093|gb|BT107045.1|     189     +       5       268     CHH     CTT
gi|270140093|gb|BT107045.1|     206     +       245     76      CHG     CAG
gi|270140093|gb|BT107045.1|     211     +       227     103     CG      CGC
gi|270143879|gb|BT110831.1|     1174    +       0       2       CHH     CAC
gi|270143879|gb|BT110831.1|     1176    +       0       2       CHH     CAT
gi|270143879|gb|BT110831.1|     1185    +       0       2       CHG     CAG
gi|270143879|gb|BT110831.1|     1188    +       0       2       CHG     CAG
gi|270143879|gb|BT110831.1|     1204    +       0       2       CHH     CTC
gi|270143879|gb|BT110831.1|     1206    +       0       2       CHH     CCT
gi|270143879|gb|BT110831.1|     1207    +       2       0       CHG     CTG
gi|270143879|gb|BT110831.1|     1216    +       0       2       CG      CGG
gi|270143879|gb|BT110831.1|     1228    +       2       0       CHG     CTG
gi|270143879|gb|BT110831.1|     1234    +       0       2       CHH     CTT
gi|270143879|gb|BT110831.1|     1239    +       0       2       CHH     CAT
gi|270143879|gb|BT110831.1|     1244    +       2       0       CHG     CAG
gi|270143879|gb|BT110831.1|     1254    +       2       0       CG      CGC
gi|270143879|gb|BT110831.1|     1256    +       0       2       CHH     CCA

Output:

gi|270143879|gb|BT110831.1|     1174    +       0       2       CHH     CAC
gi|270143879|gb|BT110831.1|     1176    +       0       2       CHH     CAT
gi|270143879|gb|BT110831.1|     1185    +       0       2       CHG     CAG
gi|270143879|gb|BT110831.1|     1188    +       0       2       CHG     CAG
gi|270143879|gb|BT110831.1|     1204    +       0       2       CHH     CTC
gi|270143879|gb|BT110831.1|     1206    +       0       2       CHH     CCT
gi|270143879|gb|BT110831.1|     1207    +       2       0       CHG     CTG
gi|270143879|gb|BT110831.1|     1216    +       0       2       CG      CGG
gi|270143879|gb|BT110831.1|     1228    +       2       0       CHG     CTG
gi|270143879|gb|BT110831.1|     1234    +       0       2       CHH     CTT
gi|270143879|gb|BT110831.1|     1239    +       0       2       CHH     CAT
gi|270143879|gb|BT110831.1|     1244    +       2       0       CHG     CAG
gi|270143879|gb|BT110831.1|     1254    +       2       0       CG      CGC
gi|270143879|gb|BT110831.1|     1256    +       0       2       CHH     CCA

谢谢各位大牛帮忙,鞠躬了~~

作者: h2ero    时间: 2013-08-10 08:26
  1. awk '
  2. {
  3.     if($4+$5>100){
  4.         deleteColumn[$1] = $1
  5.     }
  6.     if(FNR!=NR&&$1!=deleteColumn[$1]){
  7.        print $0
  8.     }
  9. }
  10. ' targetFile targetFile
复制代码

作者: WilliBhamlll    时间: 2013-08-10 08:29
  1. awk 'NR==FNR{if($4+$5>100)a[$1];next}!($1 in a)' file file
  2. gi|270143879|gb|BT110831.1|     1174    +       0       2       CHH     CAC
  3. gi|270143879|gb|BT110831.1|     1176    +       0       2       CHH     CAT
  4. gi|270143879|gb|BT110831.1|     1185    +       0       2       CHG     CAG
  5. gi|270143879|gb|BT110831.1|     1188    +       0       2       CHG     CAG
  6. gi|270143879|gb|BT110831.1|     1204    +       0       2       CHH     CTC
  7. gi|270143879|gb|BT110831.1|     1206    +       0       2       CHH     CCT
  8. gi|270143879|gb|BT110831.1|     1207    +       2       0       CHG     CTG
  9. gi|270143879|gb|BT110831.1|     1216    +       0       2       CG      CGG
  10. gi|270143879|gb|BT110831.1|     1228    +       2       0       CHG     CTG
  11. gi|270143879|gb|BT110831.1|     1234    +       0       2       CHH     CTT
  12. gi|270143879|gb|BT110831.1|     1239    +       0       2       CHH     CAT
  13. gi|270143879|gb|BT110831.1|     1244    +       2       0       CHG     CAG
  14. gi|270143879|gb|BT110831.1|     1254    +       2       0       CG      CGC
  15. gi|270143879|gb|BT110831.1|     1256    +       0       2       CHH     CCA
复制代码

作者: jomenxiao    时间: 2013-08-10 09:17
awk一直比较菜,看到不顺眼的,球大牛给学习的机会
  1. {if($4+$5>100){
  2.                 a[NR]=$1
  3.         }
  4. else{
  5.                 b[NR]=$1
  6.                 c[NR]=$0
  7.         }

  8. for(goodnr in b){
  9.         for(badnr in a){
  10.                 if(b[goodnr] == a[badnr]){
  11.                         delete c[goodnr]
  12.                         }       
  13.                 }
  14.         }
  15. }
  16. END{
  17.         for(printnr in c)
  18.                 print c[printnr]
  19.         }       
复制代码

作者: 关阴月飞    时间: 2013-08-10 10:47
本帖最后由 关阴月飞 于 2013-08-10 11:12 编辑

回复 1# 56836430

  1. awk '{a[NR,$1]=$0;b[$1];if($4+$5>100)c[$1]}END{for(i in c)delete b[i];for(;n++<NR;)for(i in b)if(a[n,i])print a[n,i]}' file

复制代码

作者: cao627    时间: 2013-08-10 12:37
  1. awk '{c[NR]=$1;a[NR,""]=$0;if($4+$5>100)b[$1]++}END{for(;n++<NR;)if(A=a[n,b[c[n]]])print A}' file
复制代码

作者: EnglandUnix    时间: 2013-08-10 17:45
{
   if( $4 + $5 > 100 )
   {
      a[$1]=$1
      next
   }
   if( !($1 in a)  )
   {
      print
   }
}
我这么写的结果是:

gi|270140093|gb|BT107045.1|     23      +       18      2       CG      CGG
gi|270140093|gb|BT107045.1|     39      +       8       54      CHH     CAA
gi|270140093|gb|BT107045.1|     53      +       0       86      CHH     CCT
gi|270140093|gb|BT107045.1|     54      +       1       86      CHH     CTT
gi|270140093|gb|BT107045.1|     58      +       12      78      CHH     CAA
gi|270143879|gb|BT110831.1|     1174    +       0       2       CHH     CAC
gi|270143879|gb|BT110831.1|     1176    +       0       2       CHH     CAT
gi|270143879|gb|BT110831.1|     1185    +       0       2       CHG     CAG
gi|270143879|gb|BT110831.1|     1188    +       0       2       CHG     CAG
gi|270143879|gb|BT110831.1|     1204    +       0       2       CHH     CTC
gi|270143879|gb|BT110831.1|     1206    +       0       2       CHH     CCT
gi|270143879|gb|BT110831.1|     1207    +       2       0       CHG     CTG
gi|270143879|gb|BT110831.1|     1216    +       0       2       CG      CGG
gi|270143879|gb|BT110831.1|     1228    +       2       0       CHG     CTG
gi|270143879|gb|BT110831.1|     1234    +       0       2       CHH     CTT
gi|270143879|gb|BT110831.1|     1239    +       0       2       CHH     CAT
gi|270143879|gb|BT110831.1|     1244    +       2       0       CHG     CAG
gi|270143879|gb|BT110831.1|     1254    +       2       0       CG      CGC
gi|270143879|gb|BT110831.1|     1256    +       0       2       CHH     CCA

这个是怎么回事呢?

作者: 关阴月飞    时间: 2013-08-10 18:58
回复 7# EnglandUnix


    明显少了个条件,FNR==NR
作者: 56836430    时间: 2013-08-11 05:43
谢谢各位大神
作者: 心乃南部之星    时间: 2013-08-12 10:28
回复 3# WilliBhamlll


    秒!

作者: davidbeckham921    时间: 2013-08-12 11:04
WilliBhamlll 发表于 2013-08-10 08:29


牛掰的思路!不错!
作者: zing840828    时间: 2013-08-12 11:28
awk 'BEGIN{while(getline < "test")if($4+$5>100)a[$1]}!($1 in a)'




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2