Mor*_*enM 3 arrays awk for-loop if-statement
我在使用if else条件为awk for循环将awk返回值存储在数组中时寻求您的帮助。
If $3 == $7
then print $9 multiplied by $4
else print $4 multiplied by (2 minus $9)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的工作是:
awk '{if ($3 == $7) print $9*$4; else print $4*(2-$9);}' file >outfile
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于第一个数据列($9)。但是,我想遍历从9到1547的所有列,并返回一个包含返回值的数组。这应该足够简单,但是我似乎无法理解这里的一些基本概念。
到目前为止,我了解需要在实际函数之前声明循环数,方法是:
awk'{for(i = 9; i <= NF; i ++)} END {如果($ 3 == $ 7)打印$ i * $ 4; 否则打印$ 4 *(2- $ i);}'
但是,如何以及何时声明该数组超出了我(生物学家)的范围。任何帮助将不胜感激。
例:
输入(大文件..此处第1-10列):
rs2070501 22 A 0.0206 0.337855 rs2070501 GA 0.977 0.066
输出:
0.0210738
此处else语句插入($ 3 *(2- $ 9)
如何获取awk以打印出第9-Nth个数组,而不仅仅是第9列
试试这个。
awk '{
for(i=9; i<=NF; ++i)
printf "%s%f",
(i==9 ? "" : " "),
($3 == $7 ? $i*$4 : $4*(2-$i));
printf "\n"
}' filename
Run Code Online (Sandbox Code Playgroud)
该( test ? when : else )仅仅是一个速记; 东西后?,如果测试结果是真被评估,和之后的东西:,否则。因此,它为第一个字段打印一个空的分隔符,否则为一个空格。并根据是否$3 == $7为真来选择如何计算字段的值。