我的输入文件就像:
a10 otu1 xx 44
b24 otu2 xxx 52
x35 otu3 xy 11
x45 otu3 zz 22
z452 Otu5 rr 78
control1 otu1 w 4
control2 otu2 ee 30
control3 otu3 tt 20
control4 otu4 yy 10
首先,我想将控件与第1列中的其他控件分开,然后匹配第二列他人第二栏的控制值。我想在第二栏中找到匹配项减去第四列中的相应值。
输出文件将是:
a10 otu1 xx 40
b24 otu2 xxx 22
x35 otu3 xy -9
x45 otu4 zz 12
z452 Otu5 rr 78
现在,要匹配第二列并减去第四列中的值,我使用:
awk 'NR==FNR {a[$2]=$2 in a?a[$2]-$4:$4; next} !b[$2]++ {print $1,$2,$3,a[$2]}' inputfile.txt{,}
但是如何在脚本中提供单独的字段信息(控件和其他)?
谢谢。
您能不能尝试以下操作。
awk '
!/^control/{
a[++count1]=$NF
b[count1]=$1 OFS $2 OFS $3
next
}
{
c[++count2]=$NF
}
END{
for(i=1;i<=count1;i++){
print b[i],a[i]-c[i]
}
}
' Input_file
[更通用的解决方案:如果您不想对第一个数组a中的字段值进行硬编码,并且第一个文件中有4个以上的字段,请尝试以下操作。
awk '
!/^control/{
a[++count1]=$NF
$NF=""
sub(/ +$/,"")
b[count1]=$0
next
}
{
c[++count2]=$NF
}
END{
for(i=1;i<=count1;i++){
print b[i],a[i]-c[i]
}
}
' Input_file