2015-10-19 87 views
0

我有一個數組,並且想要將文件列與數組元素相乘。但與數組元素的乘法不起作用。如何乘以linux/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個值。我的代碼有什麼問題?

+0

顯然你的「陣列」是不是正在AWK設置,但在某些外殼。請使用標籤更新您正在使用的shell的問題,並顯示用於設置「數組」的確切代碼。 –

+0

謝謝@Jeff Y.我添加了一個標籤和外殼。這是你問的嗎? –

回答

1

如果您使用的是陣列的一個因素,你可以把它作爲一個變量的awk腳本

awk -v s="${array[0]}" '{print s*$4}' input.file 
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 

常見的殼名是:ksh,sh,cshbash。我的是bash

+0

非常感謝@Jeff Y.當單雙換雙引號時,它非常完美。然而,我沒有得到你期待的「你還沒有說過哪個特定的外殼」?你可以選擇或指定命令來指定哪個shell? –