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
としてインポートされます。awk
arg
awk -F , -v OFS=, -v arg="$arg" '{ $2 = arg; print }' >"$outfile"
$2
は一重引用符内に表示され、シェルは一重引用符で囲まれた変数を拡張しないため、ここまたはコード内の2番目の位置引数として解釈することはできません。
OFS
(arg
両方とも変数)コマンドラインで設定されますawk
。 setを-v
使用せず、-v
実際のコードの前で間違った方法で使用していますOFS
。これにより(非公開)エラーが発生します。実際、GNUは「最適化を有効にし、入力フィールド区切り文字を文字列に設定する」ことを意味します。-v
awk
-OFS,
awk
S,
(シェル変数)に保存する必要があるバックスラッシュが含まれている場合は、環境を介して$arg
値を渡すことをお勧めします。それ以外の場合、値は次のように解釈されますawk
。
arg="$arg" awk -F , -v OFS=, '{ $2 = ENVIRON["arg"]; print }' >"$outfile"
出力ファイルはおそらく$outfile
ではありませんoutfile
。
関連:
- シェル変数をawkに/ pattern /として渡します。
- awkでシェル変数を使用する
- (そして他の多くの人)