2014-10-30 33 views
0

我的目錄添加filename列到文件的perl

1.csv 
2.csv 
3.csv 

我想在一個目錄來捕捉每個文件的名稱,並將其與一些額外的文本和列沿着打印到其coresponding文件中的附加列。

測試數據

hello,josh,12345,2014-10-30 

CODE

my $directory = 'C:\directory'; 

opendir(DIR, $directory); 
my @files = readdir(DIR); 
closedir(DIR); 
foreach (@files) { 
    print $_, "\n"; 
} 
while (<>) { 
    #Do whatever here 
    print; 
} 

預期的效果

  • 1.csv

    ID_1234,1.csv,Copmany,hello,josh,12345,2014-10-30 
    
  • 2.csv

    ID_1234,2.csv,Copmany,hello,josh,12345,2014-10-30 
    

目前的結果

. 
.. 
1.csv 
2.csv 
3.csv 
hello,josh,12345,2014-10-30 

我也想在目錄中的所有文件執行這個腳本一個。

+0

凡做了'ID_12 34'從哪裏來? – 2014-10-30 18:47:30

+0

ID_1234是一個附加的文本字符串,我想在opendir後連接我的文件名與 – JDE876 2014-10-30 18:48:51

+0

,您應該讀兩次並忽略返回值。你會在第一個閱讀時總是收到'.'和'..'。所以請閱讀兩次以跳過它們,然後輸入while循環來處理實際文件。或者,有人會毫無疑問地指出使用文件glob'glob('*。csv')來對匹配文件進行模式處理。 – 2014-10-30 19:40:25

回答

1

使用命令行的perl,

perl -i~ -F, -lane "BEGIN{$, =','; @ARGV=glob pop} print 'ID_1234',$ARGV,'Copmany',@F" *.csv 

perl -i~ -pe "BEGIN{ @ARGV=glob pop} s|^|ID_1234,$ARGV,Copmany,|" *.csv 

local $^I = "~"; 
local @ARGV = glob("C:\\directory\\*.csv"); 

while (<>) { 
    s|^|ID_1234,$ARGV,Copmany,|; 
    print; 
} 
+0

我該如何將其添加到程序中並實現爲while循環? – JDE876 2014-10-30 18:50:23

+0

我用@mpapec的答案去了所以我可以使用ARGV作爲存儲變量。它創造了奇蹟!然而,不是上面列出的正則表達式的|^| ID_1234,$ ARGV,Copmany,|;',我有一個連接字段= ARGV,即$ flds [??] = $ ARGV;對於額外的文本,我做了幾個虛擬列。即$ flds [??] =〜s /^.*?$/ ID_1234 /;和$ flds [??] =〜s /^.*?$/公司/;然後,您可以加入這些字段來創建該字符串。再次感謝! – JDE876 2014-10-31 14:44:32

0

怎麼樣:

my $directory = 'C:\directory'; 

opendir(DIR, $directory); 
my @files = readdir(DIR); 
closedir(DIR); 
foreach (@files) { 
    print qq(ID_1234,$_,Copmany,hello,josh,12345,2014-10-30\n); 
}