繁体   English   中英

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

[英]How to pass shell variable to awk command inside shell script

我只想将存储文件名的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

要将shell变量传递给awk ,您可以正确使用-v选项。

但是,这种shift是不必要的(您可以使用for迭代选项) ;; 丢失(您必须终止每个case分支),以及要处理的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变量中提供了当前处理文件的名称。 因此,您也可以将最后一行写为:

awk '{print FILENAME, $0}' "${PFILE}"

暂无
暂无

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

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