2012-08-14 43 views
1

我一直在試圖分配多個文件到一個文件句柄。然後從那裏處理整個文件句柄以查找特定模式,然後將其寫入FIN_RESULTS。Perl,如何使用管道將多個文件捕獲到同一個文件處理程序中?

的Linux
EXP文件
我/ DIR1 /賽果
我/ DIR2 /賽果

這裏是我試圖

open (FIN_RESULTS, ">", "FIN_RESULTS.txt") or die $!; 

    open(RESULTS, "-|"," find my/ -name RESULTS -print0 | xargs -0 cat"); 
    while(<RESULTS>){ 
     if(/match_something/){ 
      do some commands; 
      print FIN_RESULTS $_; 
     } 
close FIN_RESULTS; 
close RESULTS; 

的尷尬摸索,但我就這樣結束用當前目錄的ls覆蓋perl腳本本身。

感謝您的幫助!!!!!我能夠實現我原先想到的。

我有第二個問題是否有可能以這樣的方式實現查找,它只查看某些目錄? 比如,如果我有
我/ abc_dir1 /賽果
我/ dsa_dir2 /賽果
我/ afx_dir3 /賽果

,但我只希望通過DIR2和DIR3進行搜索。

@array1 = qw(dir2 dir3); 

foreach $array1(@array1) 
{ open(RESULTS, "-|"," find my/*$array1 -name RESULTS -print0 | xargs -0 cat"); 
} 

,但我得到這個錯誤,xargs的:貓:由信號13 終止,所以它不是不允許重新打開文件句柄多次。對我能做什麼有任何建議?

+0

你能更清楚你想完成什麼嗎?我不確定「用多個文件打開文件句柄」是什麼意思。你期待這個腳本做什麼? – 2012-08-14 23:55:48

+0

編輯得更清晰 – user1539348 2012-08-14 23:59:05

+0

我不清楚你想做什麼。你能澄清嗎?一個循序漸進的描述(即不是代碼)將會有所幫助。 – David 2012-08-15 00:00:10

回答

3

假設你真的想這樣做外部查找:

open RESULTS, "-|", "find my -name RESULTS -print0 | xargs -0 cat" 

應該做你想要什麼。

+1

謝謝你的幫助。我只是想知道爲什麼「 - |」必須用逗號分隔。我想我理解xargs函數。它用於從find命令分隔空白和換行符......是否正確? – user1539348 2012-08-15 15:46:39

3

有兩種格式的open功能的Perl:

兩個參數調用:

open (RESULTS, "|find my/ -name 'RESULTS'") 

兩個參數調用是簡單的,但如果你碰巧有一個具有啓動文件名與垂直管道,你會有問題。

另一種是首選以上三個參數的語法:

open (RESULTS, "-|", "find my/ -name 'RESULTS'") 

此語法使用的第二個參數聲明類型的開放你正在做的:

">" - Write 
">>" - Append 
"<" - Read 
"-|" - Read from command 
"|-" - Write to command 

它看起來就像你得到了兩個困惑。


剛一說明:

你可以做你而不是Perl的使用File::Find模塊找到。

它更有效率,因爲您沒有引發單獨的進程和更多的操作系統無關,因爲它在Windows或Linux上的工作方式是相同的。

相關問題