-2

変数またはシステム コマンドを使用して awk を呼び出そうとしています (csv ファイルの処理)

awk コマンドは

awk -F "\"*,\"*" '{if (\$6 == " ADMCHG") print \$0}' $output_dir/$userfile > $output_dir/$userfile.ADMCHG.

できます。

しかし、変数またはシステム コマンドを使用してこの awk コマンドを呼び出すと、

$result = `awk -F "\"*,\"*" '{if ($6 == " ADMCHG") print $0}' "$output_dir/$userfile" > "$output_dir/$userfile.ADMCHG"`;

また

system ("awk -F "\"*,\"*" '{if (\$6 == " ADMCHG") print \$0}' $output_dir/$userfile > $output_dir/$userfile.ADMCHG");

問題は、awk -F "\"*,\"*" ,それを修正するにはどうすればよいかということだと思います。

CSV ファイルでの AWK の使用

4

1 に答える 1

1

紛らわしいタイトルを無視したら、問題を理解したと思います-引用符をエスケープできていないため、文字列が分割されています。考慮すべき点がいくつかあります。

  • ' の間で切り替えることができます" and。たとえば、次のようになります。

    「これは ' 一重引用符がいくつか含まれる文字列です」しかし、「これは 2 つの文字列であり、間に単語があります」 しかし、二重引用符を使用すると、前に $ がある変数が評価されます

  • \ を使用してエスケープすることができるので、" \" "文字列は 1 つです。あなたは付け加えられます

ほとんどの場合、一重引用符が必要です。

system ('awk -F "\"*,\\"*" \'{if (\$6 == " ADMCHG") print \$0}\' $output_dir/$userfile > $output_dir/$userfile.ADMCHG');

文字列を囲む引用符を一重引用符に切り替え、 \ を使用して をエスケープしたことに注意してください。また、リテラル \ を別の \ でエスケープしました\\

詳しい説明はこちらをご覧ください。

于 2013-06-13T20:59:08.267 に答える