在perl中使用bash命令

ibr*_*him 6 bash perl awk

我有短的bash代码

cat example.txt | grep mail | awk -F, '{print $1}' | awk -F= '{print $2}'
Run Code Online (Sandbox Code Playgroud)

我想在perl脚本中使用它,并将其输出逐行放入数组中.我尝试了这个,但没有奏效

@array = system('cat /path/example.txt | grep mail | awk -F, {print $1} | awk -F= {print $2}');
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助......

Raf*_*ler 11

返回值system()是您执行的命令的返回状态.如果你想要输出,请使用反引号:

@array = `cat /path/example.txt | grep mail | awk -F, {print \$1} | awk -F= {print \$2}`;
Run Code Online (Sandbox Code Playgroud)

在列表上下文中计算时(例如,当返回值分配给数组时),您将获得输出行(如果没有输出,则为空列表).


ADW*_*ADW 9

尝试:

@array = `cat /path/example.txt | grep mail | awk -F, {print \$1} | awk -F= {print \$2}')`;
Run Code Online (Sandbox Code Playgroud)

注意到使用反引号并且美元符号需要被转义,因为qx运算符将默认插值(即它将认为$ 1是Perl变量而不是awk的参数).

  • 更不用说在perl中运行`awk`是一种亵渎. (4认同)