한 줄씩 읽고 줄의 문자열을 가져온 다음 perl [duplicate]을 사용하여 해당 문자열을 후속 줄에 할당합니다.

한 줄씩 읽고 줄의 문자열을 가져온 다음 perl [duplicate]을 사용하여 해당 문자열을 후속 줄에 할당합니다.

데이터 파일은 고정 길이 파일이고 파일을 한 줄씩 읽고 현재 줄에서 문자열을 가져온 다음 해당 문자열을 다음 줄에 추가하고 다른 파일에 쓰고 싶습니다.

예 1, 주어진 파일:

AAABBBB11115678xxxx
BBBCCCC22221234YYYY
MTD0001abcdARN12345 abcdedfg
AA 0002bcde
BB 0003defg
CCCDDDD33331234zzzz
MTD0003qwerTRN56789 defghigk
AA 9876bvcn
BB 8765zxcv
XXXBBBB11115678aaaa
YYYCCCC22221234bbbb

출력은 다음과 같아야 합니다.

AAABBBB11115678xxxx
BBBCCCC22221234YYYY
MTD0001abcdARN12345 abcdedfg
AA 0002bcdeARN12345
BB 0003defgARN12345
CCCDDDD33331234zzzz
MTD0003qwerARN56789 defghigk
AA 9876bvcnARN56789
BB 8765zxcvARN56789
XXXBBBB11115678aaaa
YYYCCCC22221234bbbb

예 2의 경우 주어진 파일은 다음과 같습니다.

AAABBBB11115678xxxxbedfgd
BBBCCCC22221234YYYYabcd
MTD0001abcdARN12345 abcdedfg 12345abcd
AA 0002bcde
BB 0003defg
CCCDDDD33331234zzzzqwerty
MTD0003qwerTRN56789 defghigk 45677defg
AA 9876bvcn
BB 8765zxcv
XXXBBBB11115678aaaazeftfy
YYYCCCC22221234bbbbefgydy

출력은 다음과 같아야 합니다.

AAABBBB11115678xxxxbedfgd
BBBCCCC22221234YYYYabcd
MTD0001abcdARN12345 abcdedfg 12345abcd
AA 0002bcdeARN12345
BB 0003defgARN12345
CCCDDDD33331234zzzzqwerty
MTD0003qwerARN56789 defghigk 45677defg
AA 9876bvcnARN56789
BB 8765zxcvARN56789
XXXBBBB11115678aaaazeftfy
YYYCCCC22221234bbbbefgydy

위의 예제 2를 구현하려면 Perl을 사용해야 합니까?

답변1

이전 줄의 "흥미로운" 부분을 기억하고 줄이 "AA", "BB" 또는 "MTD"로 시작하는 경우 이를 추가하세요(마지막 경우 문자열의 짧은 부분만 대체됨).

#!/usr/bin/perl
use warnings;
use strict;

my @repeat;
while (my $line = <>) {
    chomp $line;
    if (my ($first, $second) = $line =~ /^MTD.{8}(...)(.*?) /) {
        $repeat[0] //= $first;
        $repeat[1] = $second;
        substr $line, 11, 3, $repeat[0];
    }
    if ($line =~ /^([AB])\1 /) {
        substr $line, 11, 0, $repeat[0] . $repeat[1];
    }
    print "$line\n";
}

관련 정보