为什么awk在终端和perl脚本中的行为不同?

时间:2015-05-21 15:37:01

标签: bash perl awk

我希望在匹配某种模式的目录中首次出现文件。这是我正在使用的命令。

ls my/file/path/pattern* | awk '{print $1}'

我的目录是否应包含文件pattern1,pattern2,pattern3等...此命令仅返回pattern1。这在终端窗口中按预期工作。

它在perl脚本中失败。我的命令是

push @arr, `ls path/to/my/dir/pattern* | awk \'{print \$1}\'`;
print @arr;

这里的输出是

pattern1
pattern2
pattern3

我希望输出只是pattern1。为什么ls的整个输出被转储到数组?

编辑:我找到了一个解决方法

my $temp =  (`ls path/to/my/dir/pattern* | awk \'{print \$1}\'`)[0];

但我仍然很好奇为什么另一种方式不起作用。

编辑:有几个评论者说我的终端命令不能像我描述的那样工作,所以这里是截图。我知道awk会返回每一行的第一列,但它应该像我描述的那样只有几个文件匹配。awk returning a single match

1 个答案:

答案 0 :(得分:0)

解决了!当我在术语窗口中执行ls时,结果看起来像这样

file1 file2 file3
file4 file5 file6

但是perl命令

my $test = `ls`;

存储结果

file1
file2
file3
file4
file5
file6

由于awk'{print $ 1}'返回第1列中每行的匹配结果,因此运行命令

ls file* | awk '{print $1}'
perl中的

返回所有匹配。