【发布时间】:2020-07-09 19:12:12
【问题描述】:
我有一个文件,其中包含每个用户的用户名和密码。我需要通过使用 awk 命令将用户 ID 作为搜索元素传递来从该文件中获取用户 ID 和密码。
user101,smith,smith@123
user102,jones,passj@007
user103,albert,albpass@01
我在我的 perl 脚本中使用 awk 命令,如下所示:
...
...
my $userid = ARGV[0];
my $user_report_file = "report_file.txt";
my $data = `awk -F, '$1 ~ /$userid/ {print $2, $3}' $user_report_file`;
my ($user,$pw) = split(" ",$data);
...
...
这里出现错误:
awk: ~ /user101/ {print , }
awk: ^ syntax error
但是如果我在终端窗口中运行相同的命令,它能够给出如下结果:
$] awk -F, '$1 ~ /user101/ {print $2, $3}' report_file.txt
smith smith@123
这可能是什么问题?
【问题讨论】:
-
为什么要在 perl 中执行 awk 而不是在 perl 中执行?
-
因为
awk可以执行更快的搜索。 -
$userid和$user_report_file被替换为它们的值,那么$1$2和$3不会也被替换吗?对于这些情况,您必须逃避$ -
你确定脱壳 + 运行 awk 比在 Perl 中运行搜索要快吗?
-
awk 也在做“文件操作”。还有更多,因为 perl 必须在一个变量中捕获它的所有输出......