【问题标题】:Find letters in columns which are same like in first column and print it在与第一列相同的列中查找字母并打印
【发布时间】:2016-05-06 00:45:10
【问题描述】:

我有带有值的表,我必须找到匹配:与其他人的第一列并打印匹配项。

输入:

A:0  A:0.7541   A:0.7396    A:0.7694
A:0  0:0        0:0         0:0
C:0  C:0.8408   C:0.8459    C:0.7939
G:0  G:0.3415   G:0.3290    G:0.4228
G:0  G:0.0343   G:0.0378    T:8.237e06,G:0.02437
C:0 C:0.3895    C:0.3837    A:8.255e06,T:8.255e06,C:0.3623

输出:

    A:0  0.7541     0.7396      0.7694
    A:0  0          0           0
    C:0  0.8408     0.8459      0.7939
    G:0  0.3415     0.3290      0.4228
    G:0  0.0343     0.0378      0.02437
    C:0  0.3895     0.3837      0.3623

对于最后一行.. 如果 C 在第二列中,则在这种情况下仅打印匹配字母 C 之后的数字,所有列都相同,但可能有更多值由“,”分隔。因此,在这种情况下,只为该行打印包含匹配字母 C 的数字。 我写道:

awk '{split ($1,a,":");split ($2,b,":"); split($3,c,":"); split($4,d,":");
      if(a[1]=b[1] && a[1]=c[1] && a[1]==d[1]) print $0}' /home/fil/Desktop/uprava.txt

【问题讨论】:

    标签: awk split match


    【解决方案1】:

    awk 来救援!

    $  awk '{key=substr($1,1,2);
             n=split($NF,last,",");
             if(n>1) for(i=1;i<=n;i++) if(last[i]~key) {$NF=last[i]; break}
             for(i=2;i<=NF;i++) sub(key,"",$i); 
             print}' file | column -t
    
    A:0  0.7541  0.7396  0.7694
    A:0  0:0     0:0     0:0
    C:0  0.8408  0.8459  0.7939
    G:0  0.3415  0.3290  0.4228
    G:0  0.0343  0.0378  0.02437
    C:0  0.3895  0.3837  0.3623
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 2017-08-10
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 2018-04-04
      相关资源
      最近更新 更多