Linux
awk 參數1,1,1,2 與 bash 輸入參數衝突
我想在 bash 腳本中添加一些 awk 命令。bash 腳本需要一些輸入,輸入通過
$1, $2 and etc
. 當我呼叫 時awk
,我也想使用$1
在表格中定義一個位置,我該怎麼做呢?
example.sh
#! /user/bin/bash arg=$1 outfile=$2 awk -F, -OFS, -v '{$2="$arg"; print}' > outfile
在此腳本中,
$2
解析為$outfile
. 我怎樣才能避免這種情況?
您的
awk
命令中有一些錯誤。以下將
$arg
作為awk
變數導入arg
:awk -F , -v OFS=, -v arg="$arg" '{ $2 = arg; print }' >"$outfile"
$2
不可能在這里或您的程式碼中被解釋為第二個位置參數,因為它出現在單引號中,並且 shell 不會擴展單引號變數。
OFS
和arg
(都是awk
變數)-v
在命令行上設置。您不使用-v
設置OFS
,並且-v
在實際awk
程式碼前以錯誤的方式使用。這會給你一個錯誤(你沒有提到)。實際上-OFS,
對於 GNUawk
意味著“打開優化並將輸入欄位分隔符設置為字元串S,
”。請注意,如果
$arg
(shell 變數)包含您需要保留的反斜杠,那麼最好將值傳遞給環境,因為否則它們將被解釋為awk
:arg="$arg" awk -F , -v OFS=, '{ $2 = ENVIRON["arg"]; print }' >"$outfile"
輸出文件大概應該是
$outfile
,而不是outfile
。有關的: