我只想传递一个存储文件名的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
答案 0 :(得分:2)
要将shell变量传递给dict
,您正确使用了awk
选项。
但是,-v
是不必要的(您使用shift
迭代选项),for
丢失(您必须终止每个案例分支),以及名称要处理;;
的文件。修复了,您的脚本如下:
awk
但请注意,#!/bin/bash
for i in "$@"; do
case $i in
-p=*|--producedfile=*)
PFILE="${i#*=}"
;;
*)
# unknown option
;;
esac
done
echo "PRODUCEDFILE = ${PFILE}"
awk -v FILE="${PFILE}" '{print FILE, $0}' "${PFILE}"
已在awk
变量中提供当前处理文件的名称。所以,您也可以将最后一行写为:
FILENAME