Shell linux/awk中如何用数组元素乘以列
我有一个数组,想用数组元素乘以文件的一列。但是与数组元素的乘法不起作用 Input.fileShell linux/awk中如何用数组元素乘以列,shell,awk,Shell,Awk,我有一个数组,想用数组元素乘以文件的一列。但是与数组元素的乘法不起作用 Input.file chr1 100 150 3.5 chr1 200 450 10.5 chr1 300 950 9.5 ..... 预期产量 2 21 19 .... 代码: 我的壳 echo $SHELL /bin/bash 此乘法返回所有0值。我的代码有什么问题 好的,谢谢你的更新。您还没有说明哪个特定的shell,但问题是单引号中的所有内容都是特定于aw
chr1 100 150 3.5
chr1 200 450 10.5
chr1 300 950 9.5
.....
预期产量
2
21
19
....
代码:
我的壳
echo $SHELL
/bin/bash
此乘法返回所有0值。我的代码有什么问题 好的,谢谢你的更新。您还没有说明哪个特定的shell,但问题是单引号中的所有内容都是特定于awk的,因此其中的
数组[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名称有:
ksh
,sh
,csh
,bash
。我的是bash
如果只使用数组的一个元素,可以将其作为变量传递给awk脚本
awk -v s="${array[0]}" '{print s*$4}' input.file
显然,您的“数组”不是在awk中设置的,而是在某个shell中设置的。请用您正在使用的shell的标记更新问题,并显示您用于设置“数组”的确切代码。谢谢@Jeff Y。我已经添加了标记和shell。这就是你要问的吗?非常感谢@Jeff Y。用单引号代替双引号,效果非常好。然而,我并没有得到你所期待的“你还没有说具体的外壳”?您可以使用eleborate或指定命令来指定哪个shell吗?
awk -v s="${array[0]}" '{print s*$4}' input.file