繁体   English   中英

如何从外壳程序脚本将文件名作为变量传递给awk命令

[英]how to pass the filename as variable to a awk command from a shell script

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

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

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

试图满足我的要求,我正在修改我的产品线

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

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

awk:无法打开test.csv(无此文件或目录)

谁能告诉我为什么会发生此错误,请问该如何解决?

谢谢,

正如您在上一个问题中评论时,您正在用

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 "test.csv"类的./test.sh 2 "/full/path/of/test.csv"或任何相对路径你可能需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM