Awk 如果条件匹配,则追加到行
我有一个tab delim文件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
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为什么要在循环中打印?谢谢!这很有效,更接近我以前尝试的策略:)