如何在linux / awk中用数组元素乘以一列

时间:2015-10-19 18:57:12

标签: shell awk

我有一个数组,想要将一个文件的列与数组元素相乘。但是使用数组元素的乘法不起作用。

Input.file

chr1    100    150    3.5
chr1    200    450    10.5
chr1    300    950    9.5
.....

预期输出

2
21
19
....

代码:

array=(2 3 4 5)

awk '{print $4*"${array[0]}"}' Input.file

我的外壳

echo $SHELL
/bin/bash

此乘法返回所有0值。我的代码有什么问题?

2 个答案:

答案 0 :(得分:1)

好的,谢谢你的更新。您仍然没有说出哪个特定的shell,但问题是单引号内的所有内容都是特定于awk的,因此array[0]中有一个awk变量(关联数组),而不是shell变量同名。尝试在单引号之外获取数组引用;您需要做的就是将这些双引号更改为单引号我认为:

awk '{print $4*'${array[0]}'}' Input.file

要查找shell,您可以使用ps命令查找名称以sh结尾的进程:

$ ps
      PID    PPID    PGID     WINPID   TTY     UID    STIME COMMAND
     2396       1    2396       2396  ?       197612   Oct 16 /usr/bin/mintty
     3480    2396    3480       3424  pty0    197612   Oct 16 /usr/bin/bash
     2500    3480    2500        224  pty0    197612 09:53:03 /usr/bin/ps

常见的shell名称为:kshshcshbash。我的是bash

答案 1 :(得分:1)

如果您只使用数组中的一个元素,则可以将其作为变量传递给awk脚本

 awk -v s="${array[0]}" '{print s*$4}' input.file