awk
IPが次のように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
でも使用可能)として入力します。bash
ksh93