2017-08-19 83 views
0

嘗試真的很難讓awk打印出以下變量。但無論我怎樣努力,awk不按預期打印變量

awk -F, -v x=$CLIENT_ID -v y=$BRANCH -v z=$UUID -v b=$HERMES_GROUP_CSV_ID 'BEGIN { 
    OFS = ","; ORS = "\n" 
    } { 
     if (length($3) == 0) { 
      printf "\nCLIENT $x at $y Linux System Time: $z Pacific Time: $b #####: Column 3, Row "; printf NR; printf " data missing in the Client $x group input csv. Please check\n" 
     } 
    }' ${INPUT_FILE} 

它總是打印出

CLIENT $x at $y Linux System Time: $z Pacific Time: $b #####: Column 3, Row 249 data missing in the Client $x group input csv. Please check 

可以在任何大師指教?謝謝。

回答

2

您正在使用$x作爲變量引用,但awk中的$用於引用輸入中的字段。變量在沒有裝飾的情況下使用,如x。所以:

awk -F, -v x=$CLIENT_ID -v y=$BRANCH -v z=$UUID -v b=$HERMES_GROUP_CSV_ID 'BEGIN { 
    OFS = ","; ORS = "\n" 
    } { 
     if (length($3) == 0) { 
      print "\nCLIENT "x" at "y" Linux System Time: "z" Pacific Time: "b" #####: Column 3, Row "; printf NR; printf " data missing in the Client "x" group input csv. Please check\n" 
     } 
    }' ${INPUT_FILE} 

看起來x這裏引用,但它不是:關鍵是要有x出現不帶引號的字符串中,以便它可以作爲變量進行擴展。

+0

謝謝@John Zwinck!你的建議有效! – Chubaka

+1

@EdMorton:好點,但在這種情況下,它應該是'print'而不是'printf',因爲OP實際上並未使用格式字符串。更新。 –