텍스트 파일을 파이프 문자와 결합하는 Alan의 이전 솔루션에서 아래의 솔루션을 사용하고 있습니다. 감사 ! 사람이 3 개 요구 사항을 다음과 솔루션을 강화하는 데 도움 수 있다면Perl : 여러 텍스트 파일 및 파일 이름 병합
Merge multiple text files and append current file name at the end of each line
#!/usr/bin/env perl
use strict;
use warnings;
use Text::CSV;
my $csv = Text::CSV->new({ 'sep_char' => '|' });
open my $fho, '>', 'combined.csv' or die "Error opening file: $!";
while (my $file = <*.txt>) {
open my $fhi, '<', $file or die "Error opening file: $!";
(my $last_field = $file) =~ s/\.[^\.]+$//; # Strip the file extension off
while (my $row = $csv->getline($fhi)) {
$csv->combine(@$row, $last_field); # Construct new row by appending the file name without the extension
print $fho $csv->string, "\n"; # Write the combined string to combined.csv
}
}
, 도움이 될 것입니다.
1) 내 텍스트 데이터 내에서 일부 데이터는 forllowing 형식의 따옴표 안에 있습니다. |"XYZ NR 456"|
위의 솔루션은 최종 combine.csv 파일을 열 때이 데이터를 다른 열에 배치하는 것입니다. 병합 할 때 파이프 문자 내에 모든 데이터가 결합 된 상태로 유지되는 방법이 있습니까? 이
3 워드 Place_of_Destination
발견 여기서
2) 현재 솔루션은 각 라인의 마지막에 파일명을 추가한다)의 전체 행을 삭제한다. 또한 파이프 문자로 파일 이름을 분할 할
내 이름 구조는 솔루션은 더이 파일 이름을 분할하고 각 줄의 끝에서 파이프 문자와 파일 이름 X_INRUS6_08072013을, 내가 또한하고 싶은 것은 추가 X_INRUS6_08072013.txt입니다 다음; X | INRUS6 | 08072013
모든 도움을 위해 미리 감사드립니다. 당신의 소원으로, '않는'
next if ($line =~ /Place_of_Destination/)
나 :
파일이 인쇄 전에 병합되면 Place_of_Destination이 포함 된 전체 행을 제거하는 것이 좋습니다. 나는 Perl/코드에 능숙하지 않으며, 단지 나의 필요를 위해 오래된 솔루션을 사용하려한다. 나는 당신의 입력을 사용하려했지만 작동하지 않았다. – Niriv