2015-02-18 3 views
-1

Я пытаюсь объединить/объединить контекст тысяч текстовых файлов в одной папке. Я запускаю Windows и могу использовать perl или shell-скрипт. Имена следующие.Объединить текстовые файлы схожим именем

0001_001.txt 0001_002.txt 0001_003.txt

0002_001.txt

0003_001.txt 0003_002.txt 0003_003.txt 0003_004.txt ........

И я хочу, чтобы они объединялись в следующие файлы. Например, имя файла, начинающееся с 0001, будет сливаться как 0001.txt. И все новые файлы слияния будут сохранены в другой папке.

0001.txt 0002.txt 0003.txt .......

Я знаю, как просто объединить файлы, но не имеют ни малейшего представления, сгруппировать их по именам. Может ли кто-нибудь дать мне некоторые идеи? Many Thanks

+0

в оболочке, вы можете просто сделать:. 'Кот 0001 _ * .txt> 0001.txt'. И повторите для других групп файлов. Но если у вас много групп, тогда да, было бы лучше найти программное решение. –

+0

Большое спасибо. Я пробую ту же идею, что и вы. Я использую TYPE 0001 _ *. Txt> 0001.txt и генерирую команду TYPE, используя автоматическое завершение EXCEL. Затем пропустите его в текстовом файле, сохраняя файл .bat. Очень интуитивно. –

ответ

0

Следующий код сделает трюк.

opendir my $dh, $source_dir or die $! 
my %h; 
while (my $name = readdir($dh)) { 
    $name ~~ /^(\d+)_(\d+).txt$/ or warn "Bad file name" 
    $h{$1}{$2} = 1; 
} 
while (my ($name, $parts) = each %h) { 
    for my $part (sort keys %$parts) { 
     concatfile("$name\_$part.txt", "$name.txt") 
    } 
} 

Вам нужно написать CONCAT файл самостоятельно, хотя

+0

Большое спасибо, Хосе. Ваш код также решил мою проблему. Я буду использовать его как функцию, когда я должен включить его в свой проект. –

Смежные вопросы