값을 찾아 12,2자 길이의 형식으로 작성하세요.

값을 찾아 12,2자 길이의 형식으로 작성하세요.

입력 예:

:20:210301/9944072
:25:PL63213000342008099410720012
:28C:6032563
:60F:C2101010101PLN4138,23
:61:2101010101D13,61
:86:^101
^20Text ANY
^27YTRDTAL co. ltd.
^30
^31

다음 중 하나로 시작하는 줄을 찾습니다: :60F: :61: :62M: :60M: :62F:

문자열 C, D 또는 PLN 다음에 시작하는 값을 찾습니다(예제의 값은 4138,23 및 13,61입니다).

12,2 문자 형식으로 값 쓰기

원하는 출력:

:20:210301/9944072
:25:PL63213000342008099410720012
:28C:6032563
:60F:C2101010101PLN000000004138,23
:61:2101010101D000000000013,61
:86:^101
^20Text ANY
^27YTRDTAL co. ltd.
^30
^31

편집하다: awk를 사용하여 날짜 형식을 YYMMDD에서 YYMMDDMM으로 변경하기 전에는 다음과 같습니다.

cat ./${file}.tmp.mt940 | awk -F ':61:' '{if ($1)
print $1;
else
printf "%s%s%s%s\n", substr($0,0,6), substr($0,7,4), substr($0,7,4), substr($0,11,40)
}' > ${file}.tmp2.mt940

이제 0을 추가하여 동일한 작업을 시도했지만 이제 awk에서 두 개의 서로 다른 문자/문자열(D, C, PLN 및 쉼표)을 검색하는 방법을 모르겠습니다.

편집: 최종 작업 솔루션:

cat ./${file}.tmp2.mt940 | gawk -F '/^:60F:/ or
/^:60M:/ or
/^:61:/ or
/^:62F:/ or
/^:62M:/' '{if (match($0, /^(.*)(PLN|C|D)([0-9]+),([0-9]+)$/, p)) {
    printf("%s%s%012d,%02d\n", p[1], p[2], p[3], p[4]);
  } else
print $1
}' > ${file}.mt940

답변1

약간POSIX 병동 awk:

/^:60F:/ ||
/^:60M:/ ||
/^:61:/ ||
/^:62F:/ ||
/^:62M:/ {
  n1 = match($0, /(PLN|C|D)[0-9]+,[0-9]+$/);
  if (n1) {
    p1 = substr($0, 0, n1-1);
    r1 = substr($0, n1);
    n2 = match(r1, /[0-9]/);
    p2 = substr(r1, 0, n2-1);
    r2 = substr(r1, n2);
    n3 = index(r2, ",");
    p3 = substr(r2, 0, n3-1);
    p4 = substr(r2, n3+1);
    printf("%s%s%012d,%02d\n", p1, p2, p3, p4);
    next;
  }
}
1

다음을 사용할 수 있다면 gawk더욱 좋습니다 .

/^:60F:/ ||
/^:60M:/ ||
/^:61:/ ||
/^:62F:/ ||
/^:62M:/ {
  if (match($0, /^(.*)(PLN|C|D)([0-9]+),([0-9]+)$/, p)) {
    printf("%s%s%012d,%02d\n", p[1], p[2], p[3], p[4]);
    next;
  }
}
1

답변2

최종 작업 솔루션:

cat ./${file}.tmp2.mt940 | gawk -F '/^:60F:/ or
/^:60M:/ or
/^:61:/ or
/^:62F:/ or
/^:62M:/' '{if (match($0, /^(.*)(PLN|C|D)([0-9]+),([0-9]+)$/, p)) {
    printf("%s%s%012d,%02d\n", p[1], p[2], p[3], p[4]);
  } else
print $1
}' > ${file}.mt940

관련 정보