如何将文件名作为变量传递给shell脚本中的awk命令

时间:2014-08-21 15:05:38

标签: linux bash shell awk

在我的shell脚本中,我有以下行

PO_list=$(awk -v col="$1" -F";" '!seen[$col]++ {print $col}' test.csv)

生成一个列表,其中包含来自文件test.csv的“$ 1”列中的值“col”。 也许有可能在同一个位置有几个文件,因此需要用句子循环它们。为此,我必须用变量$ i替换文件名test.csv,例如,这是文件列表中的索引。

试图满足我的要求,我正在用

修改我的行
PO_list=$(awk -v col="$1" -F";" '!seen[$col]++ {print $col}' $j)

不幸的是,我收到错误消息:

  

awk:无法打开test.csv(没有这样的文件或目录)

任何人都可以告诉我为什么会出现这种错误,我该如何解决呢?

谢谢,

1 个答案:

答案 0 :(得分:2)

正如您在上一个问题中所评论的那样,您正在使用

进行调用
abc$ ./test.sh 2

所以你只需要在调用它时添加另一个参数:

abc$ ./test.sh 2 "test.csv"

并且脚本可以是这样的:

PO_list=$(awk -v col="$1" -F";" '!seen[$col]++ {print $col}' "$2")
#                                                            ^^^^

每当您想要使用其他参数时,请记住它们是位置的。因此,第一个是$1,第二个是$2,依此类推。

如果文件恰好位于另一个目录中,您可以用./test.sh 2 "test.csv"或类似的相对路径替换./test.sh 2 "/full/path/of/test.csv"