awk에서 마지막 IP 옥텟을 반복하는 방법은 무엇입니까?

awk에서 마지막 IP 옥텟을 반복하는 방법은 무엇입니까?

awkIP가 다음과 같이 bash stdin에서 수신된 변수라고 가정하고 를 사용하여 마지막 IP 옥텟을 반복할 수 있는지 궁금합니다.

#!/bin/bash
read IP

awk -v IP="${IP}"  'BEGIN{FS="."} {for (i=1; i<=251; i++) { print $1 $2 $3 i } }'

출력은 다음과 유사합니다.

192.168.1.1
192.168.1.2
....
192.168.1.251

이것은 작동하지 않지만 아이디어를 얻으시기 바랍니다.

답변1

printf '192.168.1.%d\n' {1..251}

이는 중괄호 확장 bash(원래 zsh에서도 사용 가능한 기능 ksh93)을 사용하여 1에서 251 사이의 숫자를 생성하고 각 숫자에 대해 printf끝에 숫자가 삽입된 IP 주소가 인쇄됩니다.

다음 코드는 IP 주소를 읽고 동일한 작업을 수행합니다.

IFS='.' read a1 a2 a3 a4
printf -- "$a1.$a2.$a3.%d\n" {1..251}

사용하고 싶은 경우 awk:

awk 'BEGIN { OFS = FS = "." } { for (i = 1; i <= 251; ++i) print $1, $2, $3, i }' <<<"$IP"

입력 및 출력 필드 구분 기호가 모두 점으로 표시되기를 원하므로 FS블록 OFS의 해당 문자 에 및 를 설정합니다 BEGIN. 그런 다음 표준 입력에서 IP 주소를 읽고 각 IP 주소에 대해 1부터 251까지 반복하여 목록을 인쇄합니다.

명령줄에서 $IP"here-string"(원래는 의 기능 이지만 및 zsh에서도 사용 가능 )으로 입력합니다.bashksh93

관련 정보