Linux

awk 參數1,1,1,2 與 bash 輸入參數衝突

  • October 9, 2019

我想在 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 不會擴展單引號變數。

OFSarg(都是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

有關的:

引用自:https://unix.stackexchange.com/questions/545973