Shell-Script
使用 awk 創建和導出/導入變數?
我有一個文件,其中每一行都是新客戶資訊,例如
Pop corn, pop@gmail.com, 50, 200
我目前正在嘗試查看是否可以使用 a
awk/gawk script
將每列分配給一個變數,然後通過管道將這些變數sed
替換為模板?我將在 bash 腳本中同時執行 awk/gawk 和 sed。我可以遵循什麼好的實現來完成這項工作?我試圖不使用grep
,因為我正在嘗試學習如何將 awk/gawk、sed 和 bash 腳本結合使用,或者perl
因為我還沒有學會它。
在我看來,您最好執行以下操作:
while IFS=, read -r name email x y _ignored_; do email=${email# } x=${x# } y=${y# } sendmail -oem -oi -t << EOF To: $name <$email> Subject: Whatever x=$x y=$y EOF done < file.csv
那是因為無論如何每行至少要執行一個命令,所以使用 shell 將這些行讀入變數。並在 here-document 中使用 shell 變數擴展,而不是進行
sed
模板擴展。
awk
在這裡沒有多大幫助,因為雖然它可以使用system()
or執行命令getline()
(但通過執行 shell 來解析命令行),但它不能為這些設置環境變數,除了建構設置這些變數的 shell 程式碼。因此,它會變得非常複雜且效率較低。就像是:CODE='sendmail -oem -oi -t << EOF to: $name <$email> Subject: Whatever x=$x y=$y EOF' awk -F ', *' -v q="'" ' function shquote(s) { gsub(q, q "\\" q q, s) return q s q } {system("name="shquote($1)" email="shquote($2)" x="shquote($3) \ " y="shquote($4)"\n"ENVIRON["CODE"])}' < file.csv