我希望在匹配某种模式的目录中首次出现文件。这是我正在使用的命令。
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会返回每一行的第一列,但它应该像我描述的那样只有几个文件匹配。
答案 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中的返回所有匹配。