M152DHD3H4M2의 수를 늘리고 싶습니다.
다음과 같은 출력
M152DHD3H4M3
M152DHD3H4M4
M152DHD3H4M5
M152DHD3H4M6
답변1
방법 1: 각 문자를 별도의 필드로 처리
$ echo 'M152DHD3H4M2' | awk -F "" '{for(i=1;i<=4;i++) {$NF++;print}}' OFS=
M152DHD3H4M3
M152DHD3H4M4
M152DHD3H4M5
M152DHD3H4M6
-F ""
입력의 각 문자를 별도의 필드로 처리하도록 awk에 지시하고 OFS=
출력에 필드 구분 기호를 추가하지 않도록 awk에 지시합니다. 그런 다음 필요에 따라 마지막 필드를 추가합니다.
$NF++
마지막 필드의 값을 증가시킵니다.
POSIX에서는 이러한 널 필드 구분 기호가 필요하지 않지만 최소한 GNU awk 및 mawk는 이를 지원합니다.
방법 2: M
필드 구분 기호 로 사용
$ echo 'M152DHD3H4M2' | awk -FM '{for(i=1;i<=4;i++) {$NF++;print}}' OFS=M
M152DHD3H4M3
M152DHD3H4M4
M152DHD3H4M5
M152DHD3H4M6
-FM
그리고 awk에게 OFS=M
입력과 출력의 M
필드 구분 기호 로 사용하도록 지시합니다. 그런 다음 필요에 따라 마지막 필드를 추가합니다.
방법 3: 다음을 사용하여 문자열을 여러 부분으로 분할합니다.substr
$ echo 'M152DHD3H4M2' | awk '{for(i=1;i<=4;i++) print substr($1, 1, length($1)-1) i+substr($1, length($1))}'
M152DHD3H4M3
M152DHD3H4M4
M152DHD3H4M5
M152DHD3H4M6
여기서는 부분 문자열 함수를 사용하여 입력 줄을 수동으로 나누고 substr
필요한 경우 마지막 문자를 증가시킵니다.