[英]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.