2014-01-27 49 views
0

我有一個名爲「input」的文件夾和一個名爲「output」的文件夾。在「輸入」中,我有幾個.txt文件。我需要一個perl腳本來讀取這些文件,編輯它們(刪除第一行),並將新的.txt文件保存在「output」文件夾中。用perl可以做到這一點?Perl:從一個文件夾打開文件並將編輯後的文件保存在另一個文件夾中

謝謝

+6

是有可能。開始黑客攻擊,在出現問題的情況下返回代碼,並且您將獲得幫助。 – grebneke

+1

更好的是,不要開始黑客攻擊。開始設計一個算法,如果你在設計中遇到問題,請返回並顯示你卡在哪裏。 –

+0

我需要Perl ... 這是我的嘗試,但它不起作用: opendir(IN,「input」)||死「無法打開輸入文件」; opendir(OUT,「輸出」)||死「無法打開輸出文件」; while(){print unless 1..10; } 逼近);關閉(OUT); – user3240622

回答

0
#!/usr/bin/perl -w 
use strict; 
use warnings; 

opendir IN, 'input'; 
my @in = grep { /^[^.]/ } readdir IN; # read all file names form dir except names started with dot 
closedir IN; 

for my $in (@in) { 
    open IN, '<', "input/$in" || next; 
    open OUT, '>', "output/$in" || die "can't open file output/$in"; 
    while(<IN>) { #read file line by line 
    print OUT $_ if $. > 10; #print the last line $_ to the file if line number $. is bigger than 10 
    } 
    close OUT; 
    close IN; 
} 
+0

謝謝你,亞歷克斯。它完美的作品。如果您向我解釋此腳本背後的邏輯以瞭解未來,那將是太多了。 – user3240622

+0

@ user3240622我已將註釋添加到代碼中 – alex

1

爲什麼要使用Perl?

tail -n +N將輸出一個文件,從第N行開始,所以如果您想刪除前10行,您可以使用tail -n +11 file > new_file

要自動對文件夾中的所有文件,這個怎麼樣的bash一行代碼:

for i in input/*.txt; do e=`basename $i`; tail -n +11 $i > output/${e}; done 

編輯:運用現代符號tail -n +N代替舊的deprecated syntax

+0

不是所有的系統都有'basename',更喜歡:'cd input;爲我in * .txt; do tail -n +11「$ i」> ../output/"$i「;完成' – grebneke

相關問題