在perl脚本中粘贴和awk错误

时间:2014-05-12 07:41:02

标签: perl awk

我用过

paste Output1.txt Output2.txt | awk '{print $1, $2, $5, $15}' 

使用system(awk_commamd)在perl脚本中。 我收到了像

这样的错误
awk: {print , , , }
awk:        ^ syntax error

需要帮助来排序此错误

2 个答案:

答案 0 :(得分:6)

使用纯perl复制pasteawk的工作:

use strict;
use warnings;
use autodie;

my @fhs = map {open my $fh, '<', $_; $fh} qw(Output1.txt Output2.txt);

while (grep {!eof $_} @fhs) {
    my @lines = map {(scalar <$_>) // ''} @fhs;
    chomp @lines;
    my @fields = split ' ', join "\t", @lines;

    print join("\t", grep defined, @fields[0,1,4,14]), "\n";
}

答案 1 :(得分:4)

这是因为Perl正在将变量插入到字符串中,而是使用单引号:

system('paste Output1.txt Output2.txt | awk \'{print $1, $2, $5, $15}\'');

或:

system(q(paste Output1.txt Output2.txt | awk '{print $1, $2, $5, $15}'));

在任何情况下,最好不要使用system在Perl中执行此操作,以提高性能,可读性和可移植性。