awkおよびシェル変数と混同される

awkおよびシェル変数と混同される

awkを使用してスクリプトを実行しようとしています。エラーがないようですが、必要なファイルが生成されません。スクリプトは次のとおりです。

#!/bin/bash

echo "Number of domain:"
read number
echo "Domain name:"
read domain
more "file.txt" | awk '$2=='$domain' {print $1, "1.0"} $2!='$domain' {print $1,"-1.0"}' >"$number_domain.txt"
echo "DONE"

デフォルトでは、ドキュメントを作成し、$1をすべて保持し、$2を変更して$domainの場合は1.0を書き、そうでない場合は-1.0を書きたいと思います。

""または""とawk""と""でテキストを書く方法は混乱しています。

答え1

行の最後の項目

more "file.txt" | awk '$2=='$domain' {print $1, "1.0"} $2!='$domain' {print $1,"-1.0"}' >"$number_domain.txt"

おそらく

>"${number}_${domain}.txt"

スクリプトが読み取った2つの変数に対応します。スクリプトで変数が空の文字列でないことを確認してください。彼らがはい空の場合、awkスクリプトにエラーが発生します。

答え2

シェル変数を使用するには、スクリプト自体に貼り付けるのではなく、スクリプトにawk提供してください。awk-v awkvariable="$shellvariable"

awk -v d="$domain" '$2 == d { print $1, "1.0" } $2 != d { print $1,"-1.0" }'

これにより、その値が変数値$domainとしてスクリプトに「インポートされます」。awkd

スクリプトが正しい操作を実行している場合はわかりませんが、後でリダイレクトに${number}代わりに使用することもできます。スクリプトには呼び出し変数はありません。つまり、 。$numbernumber_domain... >"${number}_$domain.txt"

関連情報