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
としてスクリプトに「インポートされます」。awk
d
スクリプトが正しい操作を実行している場合はわかりませんが、後でリダイレクトに${number}
代わりに使用することもできます。スクリプトには呼び出し変数はありません。つまり、 。$number
number_domain
... >"${number}_$domain.txt"