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

おすすめ記事