【发布时间】:2017-09-28 16:38:26
【问题描述】:
我只想将一个存储文件名的 shell 变量传递给 awk 命令。当我在网上搜索这个问题时,我看到了许多不同的选项,但没有一个对我有用。我尝试了以下方法:
#!/bin/bash
for i in "$@"
do
case $i in
-p=*|--producedfile=*)
PFILE="${i#*=}"
shift # past argument=value
*)
# unknown option
;;
esac
done
echo "PRODUCEDFILE = ${PFILE}"
awk -v FILE=${PFILE} '{print FILE $0}' #DIDNT WORK
awk '{print FILE $0}' ${PFILE} # DIDNT WORK
awk -v FILE=${PFILE} '{print $0}' FILE #DIDNT WORK
【问题讨论】:
-
不确定我明白了,
$PFILE是文件的名称,Awk应该处理(或)只是传递给正文? -
@Inian $PFILE 是 Awk 应该按照您所说的那样处理的文件的名称。假设这是在名为 mybash.sh 的 bash 脚本中。然后我调用以下命令: bash mybash.sh -p=inputfile.txt
-
那么为什么
awk '{print FILE $0}' ${PFILE}不起作用?请记住FILE变量在此处未定义。我确信这会一次打印一行inputfile.txt的内容 -
如果您使用参数
-p=inputfile.txt调用它,那么就不需要转换。如果你用-p inputfile.txt调用它,你会shift,在这种情况下${i#*=}不起作用。删除shift。