
私のスクリプトに2つのファイルをパラメータとして渡したいです。
ファイル 1.txt には以下が含まれます。
host1
host2
host3
ファイル2.txtには次のものが含まれます。
command1 host_name morestuff
command2 host_name mnorestuff
File1から各項目を抽出し、各項目をFile2の一致する "host_name"に置き換えて出力を取得するにはどうすればよいですか?
command1 host1 morestuff
command2 host1 mnorestuff
command1 host2 morestuff
command2 host2 morestuff
command2 host3 morestuff
command2 host3 morestuff
答え1
awk
両方のファイルを順番に読み書きするスクリプトを作成します。
awk 'FNR == NR { cmd[++n] = $0; next }
{
for (i = 1; i <= n; ++i) {
command = cmd[i]
sub("host_name", $0, command)
print command
}
}' File2.txt File1.txt
これにより、コマンドはFile2.txt
名前付き配列に読み込まれますcmd
。File1.txt
を読み取ると、host_name
各コマンドの文字列はファイルから読み取られたホスト名に置き換えられ、変更されたコマンドが印刷されます。
質問のデータを考慮すると、結果は次のようになります。
command1 host1 morestuff
command2 host1 mnorestuff
command1 host2 morestuff
command2 host2 mnorestuff
command1 host3 morestuff
command2 host3 mnorestuff
答え2
#!/bin/bash
while read reptext; do
sed -e "s/host_name/$reptext/" $2
done < $1
自明でなければなりません。より多くの情報が必要な場合はお知らせください。
編集: Kusalanandaの有効なコメントに基づいています。