arrays - awk for 循环与 if else 条件数组

标签 arrays for-loop awk if-statement

我寻求您的帮助,使用 if else 条件将 awk 返回值存储在 awk for 循环的数组中。

If  $3 == $7
then print $9 multiplied by $4
else print $4 multiplied by (2 minus $9)

到目前为止我的工作是这样的:

awk '{if ($3 == $7) print $9*$4; else print $4*(2-$9);}' file >outfile

以上代码适用于第一个数据列 ($9)。但是,我想循环遍历从 9 到 1547 的所有列,并返回一个包含返回值的数组。这应该很简单,但我似乎无法理解这里的一些基本概念。

到目前为止,我了解需要在实际函数之前声明循环数:

awk ' {for(i=9;i<=NF;i++)} END {if ($3 == $7) print $i*$4; else print $4*(2-$i);}'

但是,如何以及何时声明数组超出了我(生物学家)的范围。任何帮助将不胜感激。

示例:

输入(大文件..此处第 1-10 列):

rs2070501 22 A 0.0206 0.337855 rs2070501 G A 0.977 0.066

输出:

0.0210738

这里 else 语句开始 ($3 * (2-$9)

如何让 awk 打印出数组第 9-N 个,而不仅仅是第 9 列

最佳答案

尝试一下。

awk '{
    for(i=9; i<=NF; ++i)
        printf "%s%f",
            (i==9 ? "" : " "),
            ($3 == $7 ? $i*$4 : $4*(2-$i));
    printf "\n"
}' filename

( test ?when : else ) 只是一个简写;如果测试为真,则评估 ? 之后的内容,否则评估 : 之后的内容。因此它为第一个字段打印一个空分隔符,否则打印一个空格;并根据 $3 == $7 是否为 true 选择如何计算字段的值。

关于arrays - awk for 循环与 if else 条件数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10816504/

相关文章:

java - 如何替换 "instanceof"函数中的变量

javascript - 将 dict 的所有值放入一个数组中

arrays - 将集合的值复制到 VBA 中的二维数组

javascript - 使用 LODASH 重构

javascript - React Js 循环访问父数组以进行登录授权

linux - 如何用 sed 替换文件中的多行注释

perl - 在 AWK 中调用 Perl 脚本

编译错误 : sizeof() operator in C

java - 使用 for 循环迭代 HashSet

linux - 替换所有不包含匹配字符串的行