3

マウント ポイントから情報を抽出する awk コマンドがあります ( Linux および Solaris のマウントから NFS 情報を抽出する方法で受け入れられている回答を参照してください)。

awk -F'[: ]' '{if(/^\//)print $3,$4,$1;else print $1,$2,$4}

awkホスト名の IP を検索するために、このコマンドに dig ルックアップを含めたいと思います。残念ながら、mount コマンドには IP とホスト名が含まれることがあります。私は次のことを試しましたが、不要な改行、不要なリターン コードがあり、IP アドレスがある場合は機能しません。

ホスト名の場合

echo "example.com:/remote/export on /local/mountpoint otherstuff" | awk -F'[: ]' '{if(/^\//)print system("dig +short " $3),$4,$1;else print system("dig +short " $1),$2,$4}'

戻り値

93.184.216.119
0 /remote/export /local/mountpoint

IP の場合

echo "93.184.216.119:/remote/export on /local/mountpoint otherstuff" | awk -F'[: ]' '{if(/^\//)print system("dig +short " $3),$4,$1;else print system("dig +short " $1),$2,$4}'

戻り値

0 /remote/export /local/mountpoint

どちらの場合も、以下を取得したいと思います

93.184.216.119 /remote/export /local/mountpoint

アップデート:

digIP がクエリとして提供されたときに IPを返すバージョンと、何も返さないバージョンがあるようです。

解決:

受け入れられた回答に基づいて、次の適応awkコマンドを使用しました。

 awk -F'[: ]' '{if(/^\//) { system("dig +short "$3" | grep . || echo "$3" | tr -d \"\n\""); print "",$4,$1 } else { system("dig +short "$1" | grep . || echo "$1" | tr -d \"\n\"");print "",$2,$4  };}'

追加grep . || echo "$3"は、dig が何も返さない場合に入力 IP/ホスト名が返されるように注意します。

4

1 に答える 1

3

systemコマンド実行中のawkコマンドは、そのステータスを返します。このことを考慮:

$ awk 'END { print "today is " system("date") " and sunny" }' < /dev/null
Tue Jan  7 20:19:28 CET 2014
today is 0 and sunny

このdateコマンドは、日付と改行を出力します。awk同じことが起こるから実行されます。この例では、 はそれ自体よりもsystem前に終了するprintfため、最初に日付の行が表示され、次の行に戻り値 0 のテキストが表示されますsystem

必要なものを取得するには、これを複数のコマンドに分割する必要があり、次の戻り値は必要ありませんsystem

$ awk 'END { printf "today is "; system("date | tr -d \"\n\""); print " and sunny" }' < /dev/null
today is Tue Jan  7 20:24:01 CET 2014 and sunny

の後の改行を防ぐために、dateその出力を にパイプしましたtr -d "\n"

簡単に言うと、次のように変更します。

print system(...), $2, $4

これに:

system(... | tr -d \"\n\"); print "", $2, $4
于 2014-01-07T19:28:24.497 に答える