Php 在linux命令中使用多个awk语句

Php 在linux命令中使用多个awk语句,php,linux,bash,shell,awk,Php,Linux,Bash,Shell,Awk,我正在php文件中执行一个bash脚本 我有一个文本文件。 我必须提取文件的最后100行。 在这100行中,我必须提取第三列中带有字符A的行。 在这些入围的行中,我必须得到第二列有数字2的行的行号。 这是我的代码,它不提供任何输出 <?php $eff="195"; $chain="B"; $struct_pos="2"; $pre_line=exec("tail $i.dssp -n $eff | awk '$3==$chain'| awk -F' ' -v var=$struct_

我正在php文件中执行一个bash脚本

我有一个文本文件。 我必须提取文件的最后100行。 在这100行中,我必须提取第三列中带有字符A的行。 在这些入围的行中,我必须得到第二列有数字2的行的行号。 这是我的代码,它不提供任何输出

<?php

$eff="195";
$chain="B";
$struct_pos="2";

$pre_line=exec("tail $i.dssp -n $eff | awk '$3==$chain'| awk -F' ' -v var=$struct_pos '{if ($2==var) print FNR}'");

?>
这个问题的解决方案是什么?

试试这个

$pre_line=exec("tail $i.dssp -n $eff | awk '$3==\"'$chain'\"'| awk -F' ' '{if ($2=='$struct_pos') print FNR}'");

awk“$3==$chain”是错误的。您必须使用-v将var$链提供给awk,就像您在下一个管道中所做的那样。谢谢。但是如果我不使用后面的awk语句,它工作得很好?此语句工作正常:$pre_line=exectail$i.dssp-n$eff | awk'$3==$chain';啊,这是有道理的,因为php可能会先替换变量。也许您可以将这两个条件合并为:awk'$3==$chain&&$2==$struct_pos{print NR}。谢谢。这是命令行的工作,但我不知道为什么它不能在php中工作。我将命令重新编写如下:$pre_line=exectail$I.dssp-n$eff | awk'$3==$chain&&$2==$struct_pos{print FNR}';通常它是tail-n100文件而不是tail-n100文件。。。
$pre_line=exec("tail $i.dssp -n $eff | awk '$3==\"'$chain'\"'| awk -F' ' '{if ($2=='$struct_pos') print FNR}'");