Awkパラメータ$ 1、$ 2がbash入力パラメータと競合しています。

Awkパラメータ$ 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できますか?

ベストアンサー1

コマンドにいくつかのエラーがありますawk

以下は変数$argとしてインポートされます。awkarg

awk -F , -v OFS=, -v arg="$arg" '{ $2 = arg; print }' >"$outfile"

$2は一重引用符内に表示され、シェルは一重引用符で囲まれた変数を拡張しないため、ここまたはコード内の2番目の位置引数として解釈することはできません。

OFSarg両方とも変数)コマンドラインで設定されますawk。 setを-v使用せず、-v実際のコードの前で間違った方法で使用していますOFS。これにより(非公開)エラーが発生します。実際、GNUは「最適化を有効にし、入力フィールド区切り文字を文字列に設定する」ことを意味します。-vawk-OFS,awkS,

(シェル変数)に保存する必要があるバックスラッシュが含まれている場合は、環境を介して$arg値を渡すことをお勧めします。それ以外の場合、値は次のように解釈されますawk

arg="$arg" awk -F , -v OFS=, '{ $2 = ENVIRON["arg"]; print }' >"$outfile"

出力ファイルはおそらく$outfileではありませんoutfile

関連:

おすすめ記事