0
コマンドを受け取り、出力ファイルがすでに存在するかどうかに基づいて実行するcheckExistという関数があります。私は、コマンドを作成し、出力ファイルの名前だけFILE2あるfile1と、このようなコマンドを渡すので、彼らはすでにあなたが上書きしたい場合には、他に要求されますが存在するかどうかはスキップします:一重引用符で囲まれたawkコマンド
checkExist file1 file2 command1 command2
で
checkExist 1.txt 2.txt "echo $1 | awk '$5 <= 10 {print $3, $4}'" "echo $2 | awk '$5 <= 10 {print $3, $4}'"
上記の$ 1と$ 2は、関数checkExist withinを含むスクリプト "smartfilter.sh"への入力です。だから彼らは単なるファイル入力です。
その後checkExist機能でユーザーのタイプ「Y/Y」が上書きする場合、またはファイルが既に存在していないことが
eval $3 &
eval $4 &
wait
意志と、私はそうのようなエラーが出る:
をawk: >= 10 {print , }
awk:^syntax error
awk: >= 10 {print , }
awk: ^syntax error
awk: >= 10 {print , }
awk: ^syntax error
awk: cmd. line:1: >= 10 {print , }
awk: cmd. line:1: ^unexpected newline or end of string
私は、awkとevalの前後で一重引用符を正しく解析していないことを知っています。私は\'
を試しましたが、それはどちらもうまくいきません。これを行う適切な方法はありますか?
これは機能しました。あなたはその論理を説明してもらえますか? –
シェルは二重引用符の中で変数置換を行います。したがって、 '$ 3'と' $ 4'は何も置き換えられません(これらの変数は設定されていないため)。あなたの一重引用符は二重引用符の中に含まれているので、シェルによって無視されます(しかし、awkでは無視されます)。私はドルを '\'で引用したので、シェルは変数を変数と考えることはありません。シェルは '\'引用符を取り除くので、awkは正しいことを行います。 (シェルとawkの両方を引用したい場合は、 '\\\ ''と言う必要があります)。私は何を言うことができますか?引用レベルは黒の魔法です。 – ams
あなたは魔術師の私の友人です –