我有一個名爲「input」的文件夾和一個名爲「output」的文件夾。在「輸入」中,我有幾個.txt文件。我需要一個perl腳本來讀取這些文件,編輯它們(刪除第一行),並將新的.txt文件保存在「output」文件夾中。用perl可以做到這一點?Perl:從一個文件夾打開文件並將編輯後的文件保存在另一個文件夾中
謝謝
我有一個名爲「input」的文件夾和一個名爲「output」的文件夾。在「輸入」中,我有幾個.txt文件。我需要一個perl腳本來讀取這些文件,編輯它們(刪除第一行),並將新的.txt文件保存在「output」文件夾中。用perl可以做到這一點?Perl:從一個文件夾打開文件並將編輯後的文件保存在另一個文件夾中
謝謝
#!/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;
}
謝謝你,亞歷克斯。它完美的作品。如果您向我解釋此腳本背後的邏輯以瞭解未來,那將是太多了。 – user3240622
@ user3240622我已將註釋添加到代碼中 – alex
爲什麼要使用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
不是所有的系統都有'basename',更喜歡:'cd input;爲我in * .txt; do tail -n +11「$ i」> ../output/"$i「;完成' – grebneke
是有可能。開始黑客攻擊,在出現問題的情況下返回代碼,並且您將獲得幫助。 – grebneke
更好的是,不要開始黑客攻擊。開始設計一個算法,如果你在設計中遇到問題,請返回並顯示你卡在哪裏。 –
我需要Perl ... 這是我的嘗試,但它不起作用: opendir(IN,「input」)||死「無法打開輸入文件」; opendir(OUT,「輸出」)||死「無法打開輸出文件」; while(){print unless 1..10; } 逼近);關閉(OUT); – user3240622