我正在尝试在单个文件中相互减去数据集。但是,当脚本命中输出值时,na
输出不正确。
输入文件:
# <header>
2002 328 0.1345 2002 328 na
2002 329 na 2002 329 0.281065021
2002 330 0.9 2002 330 0.1
我当前使用的 awk 脚本是:
NR==1{print $0, " diff.\n"}
NR>2{printf("%s\t%7.6f\n", $0, $3-$6)}
其输出:
# <header> diff.
2002 328 0.1345 2002 328 na 0.134500
2002 329 na 2002 329 0.281065021 -0.281065
2002 330 0.9 2002 330 0.1 0.800000
在这种情况下,为了使分析更容易,我正在寻找输出列来显示“ na
”而不是测量值。
期望的输出:
# <header> diff.
2002 328 0.1345 2002 328 na na
2002 329 na 2002 329 0.281065021 na
2002 330 0.9 2002 330 0.1 0.800000
答案1
尝试使NR>2
语句有条件,例如:
BEGIN {OFS="\t"}
NR==1 {print $0, "diff.\n"}
NR>2 {print $0, ( $3=="na" || $6=="na" ? "na" : sprintf("%7.6f", $3-$6) )}
- 这用作
$3=="na" || $6=="na"
条件,即if either field three or six are "na", print "na", else print the subtraction
- 如果不是数字的字段 3 或 6 也可能不是“
na
”,您可以尝试更复杂的方法:$3 !~ /^[0-9]+(\.[0-9]+)?$/ || $6 !~ /^[0-9]+(\.[0-9]+)?$/
- 上面还用作
\t
输出字段分隔符,以简化一些格式设置