![awk 印刷ホスト名 [閉じる]](https://linux33.com/image/118075/awk%20%E5%8D%B0%E5%88%B7%E3%83%9B%E3%82%B9%E3%83%88%E5%90%8D%20%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
このコマンドを実行する現在のシステムのホスト名をどのように指定できますか?
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"
これは、実行somecommand
(ls
コマンドなど)され、実行中のシステムのホスト名を含む名前のファイルに出力を保存します。
ファイルのヘッダーまたはフッターにホスト名を挿入するには、次の手順を実行します。
( 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
オプションを使用すると、コマンドラインで変数を設定できますawk
。awk
HOSTNAME
環境変数が定義されている可能性があります。この場合、次のコマンドの代わりに使用できますhostname
。
awk -v hostname="$HOSTNAME" ...
awk
またはを使用して、コード内の環境変数に直接アクセスできますENVIRON["HOSTNAME"]
。
答え2
次のように、「HOSTNAME」環境変数の内容を挿入できます。
ls -l | awk '{print ENVIRON["HOSTNAME"] ": " $9}'
これがうまくいかない場合は、「HOST」変数に必要な内容が含まれていることを確認してください。
ls -l | awk '{print ENVIRON["HOST"] ": " $9}'
両方が設定されていない場合は、以下を試してください。
ls -l | awk 'BEGIN { h="/bin/hostname"; h | getline host; close (h);} {print host ": " $9}'
これは/bin/hostname
コマンドを一度呼び出し、その出力をhost
変数に入れ、各行の前に付けます。
編集:ホスト名は一度だけ印刷できると質問を変更しました。バリエーションは次のとおりです。
ls -1 | awk 'BEGIN { h="/bin/hostname"; h | getline host; close (hostname);} { if (NR < 2) {print host}; print "\t" $1}'