Command | Query | awk変数に保存するか、関数として実行[冗長]

Command | Query | awk変数に保存するか、関数として実行[冗長]

コマンド値を変数に保存しようとしてエラーが発生します。

var = `cat $1 | grep "STAN: \[$2\]" | awk -F '|' '{print $3; exit}'` 

それは私にエラーを与える

var: command not found

答え1

=はい、変数の割り当てではシェルからスペースで囲むことができないため、エラーが発生します。シェルは、var引数=とコマンド置換が返すすべてを使用して呼び出したコマンドを実行したいので、その行を解釈します(さらに結果を単語に分割し、引用符が付けられていないため、その単語にファイル名のグロービングを適用しました。後)。

代わりに

var=$( awk -F '|' -v str="$2" '$0 ~ "STAN: \\[" str "\\]" { print $3; exit }' "$1" )

私はまた、アンを自由に削除grepし、catバックティックを使用して廃止されたコマンドの置き換えをバックティックを使用するように変更しました$( ... )

grep、およびを使用してcutこれを行うこともできますhead

var=$( grep -e "STAN: \[$2\]" "$1" | head -n 1 | cut -d '|' -f 3 )

または、特定の回数が一致した後に停止することを選択grepできる場合:-m

var=$( grep -m 1 -e "STAN: \[$2\]" "$1" | cut -d '|' -f 3 )

または、検索している式が実際に正規表現ではない文字列の場合:

var=$( grep -m 1 -F -e "STAN: [$2]" "$1" | cut -d '|' -f 3 )

関連情報