-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,例如:

    "this is a ' string with some ' single quotes in it" but "this is two " strings "with a word in between" 但是如果你使用双引号,那么前面有 $ 的变量将被计算

  • 您可以使用 \ 来逃避事情," \" "一个字符串也是如此。你可以加

最有可能的是,您需要单引号:

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

请注意,我已将包含字符串的引号切换为单引号,并使用 \ 对 ' 进行转义。我还用另一个 \ 转义了文字 \,这就是为什么有一个\\.

在这里查看更详细的解释。

于 2013-06-13T20:59:08.267 回答