如何将shell变量传递给shell脚本中的awk命令

时间:2017-09-28 16:38:26

标签: linux bash shell awk

我只想传递一个存储文件名的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

1 个答案:

答案 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