IPの最初の3つのオクテットに基づいて名前付きファイルからawk情報を取得しようとしています。このファイルでは、IPは列2または列4にあります。 IPが2列にある場合は、2列の内容を印刷してから、1列の内容を印刷したいと思います。 IPが4列にある場合は、4列と1列を印刷します。 (サーバー名の列1)。
以下は、すべての列を印刷する出力の例です。
awk /10.1.49/ /var/named/internal/Domain/abc.com
出力は次のとおりです。
server01 IN A 10.1.49.29
server02 IN A 10.1.49.80
;globalname01.abc.com 10.1.49.60
;globalname02.abc.com 10.1.49.61
IP列に基づいてソートしてから、IPとサーバー名を印刷したいと思います。
10.1.49.20 server01
10.1.49.60 globalname01.abc.com
10.1.49.61 globalname02.abc.com
10.1.49.80 server02
私はファイルを使って列数を取得し、{print NF}
再度読み(必要な場合)ソートする方法を知っています。{print $4 $1}
{print $2 $1}
答え1
努力する:
$ awk '$NF~/^10\.1\.49/ {sub(/;/, "", $1); print $NF,$1}' file | sort
10.1.49.29 server01
10.1.49.60 globalname01.abc.com
10.1.49.61 globalname02.abc.com
10.1.49.80 server02
どのように動作しますか?
$NF~/^10\.1\.49/ {..}
最後の列がで始まる行が選択されます
10.1.49
。これらの行の場合は、中かっこで囲まれたコマンドを実行します。sub(/;/, "", $1)
中括弧内の最初のコマンドは代替コマンドです。
;
存在する場合、最初のフィールドから削除されます。print $NF,$1
これにより、最後のフィールドが印刷され、次に(修正可能)最初のフィールドが印刷されます。
sort
これにより出力がソートされます。 IPアドレスをソートする方法はいくつかありますが、さまざまなソートオプションを使用すると、目的の結果を得るのに役立ちます。
答え2
awk '{ if ($1 ~ /;.*/) { print $2, substr($1, 2); } else { print $4, $1; } }' file | sort
出力:
10.1.49.29 server01
10.1.49.60 globalname01.abc.com
10.1.49.61 globalname02.abc.com
10.1.49.80 server02