Awk 如果条件匹配,则追加到行

Awk 如果条件匹配,则追加到行,awk,Awk,我有一个tab delim文件 NC_044998.1 4015 0 TT 2 GG 0 TT 0 TT 0 TT NC_044998.1 4015 0 TT 0 TT 0 TT 2 GG 0 TT NC_044998.1 4016

我有一个tab delim文件

NC_044998.1     4015    0       TT      2       GG      0       TT      0       TT      0       TT      
NC_044998.1     4015    0       TT      0       TT      0       TT      2       GG      0       TT      
NC_044998.1     4016    0       TT      0       TT      0       TT      0       TT      0       TT      
NC_044998.1     4016    0       TT      0       TT      0       TT      0       TT      0       TT      
NC_044998.1     4017    2       CC      2       CC      2       CC      2       CC      2       CC      
我想将“
fixed
”添加到备用列
$4、$6、$8、$10、$12相同的行中,否则添加“
var
”。 所以输出是

NC_044998.1     4015    0       TT      2       GG      0       TT      0       TT      0       TT  var    
NC_044998.1     4015    0       TT      0       TT      0       TT      2       GG      0       TT  var   
NC_044998.1     4016    0       TT      0       TT      0       TT      0       TT      0       TT  fixed   
NC_044998.1     4016    0       TT      0       TT      0       TT      0       TT      0       TT  fixed    
NC_044998.1     4017    2       CC      2       CC      2       CC      2       CC      2       CC  fixed
我目前正在使用这个修改的答案来回答我发布的一个类似的问题

awk -F '\t' '{for (i=6; i<=24; i+=2) if ($i == $4) print $0,"fixed"; else print $0,"var"}' 
awk-F'\t'{for(i=6;i这里有一个在
打印中使用条件运算符的:

$ awk '
BEGIN {
    FS=OFS="\t"
}
{
    print $0,($4==$6 && $6==$8 && $8==$10 && $10==$12?"fixed":"var")
}' file
输出:

NC_044998.1     4015    0       TT      2       GG      0       TT      0       TT      0       TT      var
NC_044998.1     4015    0       TT      0       TT      0       TT      2       GG      0       TT      var
NC_044998.1     4016    0       TT      0       TT      0       TT      0       TT      0       TT      fixed
NC_044998.1     4016    0       TT      0       TT      0       TT      0       TT      0       TT      fixed
NC_044998.1     4017    2       CC      2       CC      2       CC      2       CC      2       CC      fixed
您的方法的工作原理如下:

$ awk -F '\t' '{
    for(i=4;i<12;i+=2)       # loop from 4 to ... not 12
        if($i!=$(i+2)) {     # if i and next meaningful field do not equal
            print $0,"var"   # output var
            next             # and jump to next record
        } 
    print $0,"fixed"         # if loop is passed without next, its fixed
}' file
$awk-F'\t''{

对于(i=4;i您可以将您的尝试调整如下:

$ awk -F '\t' '{
    for(i=4;i<12;i+=2)       # loop from 4 to ... not 12
        if($i!=$(i+2)) {     # if i and next meaningful field do not equal
            print $0,"var"   # output var
            next             # and jump to next record
        } 
    print $0,"fixed"         # if loop is passed without next, its fixed
}' file
awk-v fpos=“4 6 8 10 12”开始{
FS=OFS=“\t”
拆分(FPO、FLD、/)
}
{
对于(我在flds中)
如果($(flds[i])!=$(flds[1])){
打印$0,“var”
下一个
}
打印$0,“已修复”
}"档案"

如果存档位置始终增加2,则可以使用此awk:

awk 'BEGIN {
   FS = OFS = "\t"
}
{
   for (i=6; i<=12; i+=2)
      if ($i != $4) {
         print $0, "var"
         next
      }
      print $0, "fixed"
}' file
awk'开始{
FS=OFS=“\t”
}
{

对于(i=6;iYes,现在修复了该示例。thxs为什么要在循环中打印?谢谢!这很有效,更接近我以前尝试的策略:)