[英]how to pass the filename as variable to a awk command from a shell script
[英]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.