awk 印刷ホスト名 [閉じる]

awk 印刷ホスト名 [閉じる]

このコマンドを実行する現在のシステムのホスト名をどのように指定できますか?

ls -l | awk '{print $9}'

電流出力

fileabc.txt
fileABC.txt
filedata
fisample

期待される出力

hostname    fileabc.txt
            fileABC.txt
            filedata
            fisample

複数のサーバーでこれを実行して日付をファイルに保存する場合は、特定のサーバーの開始行と終了行を知るためにこれを実行しようとします。

より良い解決策があればアドバイスをお願いします。

ベストアンサー1

更新された質問の正確な結果を得るには:

ls -1 | awk -vhostname="$(hostname)" \
            'NR == 1 { printf("%-20s\t%s\n", hostname, $0) }
             NR > 1  { printf("%-20s\t%s\n", "", $0) }'

ls -1これにより、ホスト名に20文字の幅の列が割り当てられ、出力の2番目の列が追加されます。列はタブで区切られ、ホスト名は最初の行にのみ表示されます。


現在のシステムのホスト名を取得する方法と、ファイル名またはファイル内でそのホスト名を使用して、データがどのシステムから来たのかを知る方法を尋ねるようです。

マシンのホスト名はhostnameコマンドによって提供されます。これは通常、ドメイン名(定義されている場合)を含む完全なホスト名を提供し、最初のドットのhostname -s前に名前も提供します。

$ hostname
client.local

$ hostname -s
client

コマンドがあり、出力を保存するファイル名を作成したい場合は、次のことができます。

somecommand >"$(hostname)_output.txt"

これは、実行somecommandlsコマンドなど)され、実行中のシステムのホスト名を含む名前のファイルに出力を保存します。

ファイルのヘッダーまたはフッターにホスト名を挿入するには、次の手順を実行します。

( echo "HEADER: The following comes from $(hostname)"
  somecommand
  echo "FOOTER: The above came from $(hostname)" ) >outputfile

または以下を使用してawk

somecommand | awk -v hostname="$(hostname)" 'BEGIN { print "## From:", hostname }
                  { print } END { print "## From:", hostname }'

somecommand出力を保存したいコマンドはどこにありますか?

ホスト名で各行にタグを付けるには:

somecommand | awk -v hostname="$(hostname)" '{ print hostname, $0 }'

またはその変形。

この-vオプションを使用すると、コマンドラインで変数を設定できますawkawk

HOSTNAME環境変数が定義されている可能性があります。この場合、次のコマンドの代わりに使用できますhostname

awk -v hostname="$HOSTNAME" ...

awkまたはを使用して、コード内の環境変数に直接アクセスできますENVIRON["HOSTNAME"]

おすすめ記事