我使用下面的行分割和處理指定多個輸入文件一個班輪製表符分隔的.txt文件:對通過擴展
perl -lane 'next unless $. >30; @array = split /[:,\/]+/, $F[2]; print if $array[1]/$array[2] >0.5 && $array[4] >2' input.txt > output.txt
有沒有辦法來改變這種單以便在多個輸入文件上執行此操作,而無需單獨指定每個文件?
理想的情況是在當前目錄中的所有文件執行其持有.TXT(或其他方式)的文件擴展名來完成 - 然後輸出一組修改過的文件的名稱,例如:
輸入:
test1.txt
test2.txt
輸出:
test1MOD.txt
test2MOD.txt
I K現在我可以訪問文件名以用$ARGV
對其進行修改,但我不知道如何讓它在多個文件上運行。
解:
perl -i.MOD -lane 'next unless $. >30; @array = split /[:,\/]+/, $F[2]; print if $array[1]/$array[2] >0.5 && $array[4] >2; close ARGV if eof;' *.txt
$.
需要被複位,否則由零誤差拋出一個除法。
問題是 - '<>'被視爲單個文件句柄。如果您希望以單個流的形式循環播放整個文件,但它不會區分輸入文件。 – Sobrique
@Sobrique那麼'<*.txt>'會批處理所有行同時丟失輸入文件信息? – AnnaSchumann
編號'while while(<>)'which perl -n' which will will will。 – Sobrique