2017-10-16 24 views
0

我正在研究Perl腳本,該腳本使用glob檢查目錄的內容,然後將輸出寫入新文件。但文件中的每個條目都使用空格分隔,我需要它以新行打印每個條目。我的代碼是這樣的Perl - 將每個條目保存在新文件中

open(New, ">/u/smanik/xyz.txt"); 

@files = glob('/user/manik/*.csv'); 
$size = @files; 

print "Total no of files: $size \n"; 

print New @files; 

open(New, "/user/manik/xyz.txt"); 
while (<New>) { 
    print "$_"; 
} 

close(New); 

這是通過在文件中打印成

/user/manik/A.csv /user/manik/B.csv 

給輸出,但我需要它在文件中印這樣

A.csv 
B.csv 
C.csv 

我試着在第五行中加入\n但這沒有奏效。

+0

我不認爲它們之間存在的空間。如果這是你的完整代碼,它應該是'/ user/manik/A.csv/user/manik/B.csv'。也許你已經'打印新的'@files「'? – simbabque

+0

'\ n'是換行符,而不是'/ n' – xxfelixxx

+0

對於我實際使用的打印錯誤感到抱歉\ n只有 –

回答

0

如果你想要它打印換行符,你需要告訴它。

my @foo = (1, 2, 3); 
print @foo; 

這將打印

這是因爲陣列@foo被作爲參數列表來print,這將只是輸出接連所有的論據之一。

my @foo = (1, 2, 3); 
print "@foo"; 

現在,這將打印

1 2 3 

因爲一個雙引號""字符串裏的數組正在使用$,output field separator,默認情況下是一片空白插值。

如果你想要它使用換行符,最簡單的方法是join你的數組與\n,它產生一個單一的字符串作爲print的參數。

my @foo = (1, 2, 3); 
print join "\n", @foo; 

這會給你

1 
2 
3 
+0

感謝這是做的招。但是如果你有新的問題,我還需要從每個條目的起始處刪除/ user/manik/ –

+0

,請提出一個新問題。但我建議你先試試自己。 – simbabque

+0

我對'打印連接'有非理性的仇恨\ n「,@ foo'成語!這主要是因爲我認爲'\ n'作爲記錄*終止符*,而不是記錄分隔符。因此,我認爲'打印'$ @ \「爲@ foo'(這是相同數量的字符)或'說爲@ foo'好得多,但可以隨意忽略我。 – Borodin

相關問題