簡體   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