Linuxシステムにデータを含む2つのファイル(mac
および)があり、データを変数に置き換えるためのリストを含むuid
「テンプレート」に転送しようとしています。sed
リスト.txt:
CP00
CP01
mac.txt:
FF-AA-BB-AA-DD-AA
00-AA-11-AA-11-EE
uid.txt:
e3442342a
e43342f0a
型:
#Template for Cobbler:
"uid": "change1",
"mac_address": "change2",
テンプレートを含む2つのファイルが必要です。最初のファイルには最初の「uid」と最初の「mac」が含まれ、2番目のファイルには2番目の「uid」と2番目の「mac」が含まれます。
私はこれを試していますが、動作しません。
change1=$(cat /tmp/cobbler/uid.txt);
change2=$(cat /tmp/cobbler/mac.txt);
for i in `cat /tmp/cobbler/list.txt`; do
echo $i | cat /tmp/cobbler/template |
sed -e "s/change1/$change1/g" -e "s/change2/$change2/g" >> /tmp/cobbler/$i;
done
結果はリストの2つの名前を組み合わせて、CP00CP01
最初の「uid」と最初の「mac」だけを入れます。
誰でも私を助けることができますか?ありがとうございます!
ベストアンサー1
awkを使用してください。
$ cat tst.sh
#!/usr/bin/env bash
cd /tmp/cobbler &&
awk '
FILENAME == ARGV[1] { uids[FNR] = $1 }
FILENAME == ARGV[2] { macs[FNR] = $1 }
FILENAME == ARGV[3] { outs[FNR] = $1 }
FILENAME == ARGV[4] {
for ( outNr in outs ) {
if ( $1 == "\"uid\":" ) {
$2 = "\"" uids[++uidNr] "\","
}
if ( $1 == "\"mac_address\":" ) {
$2 = "\"" macs[++macNr] "\","
}
print > (outs[outNr] ".txt")
}
}
' uid.txt mac.txt list.txt template
$ ./tst.sh
$ head /tmp/cobbler/CP*
==> /tmp/cobbler/CP00.txt <==
#Template for Cobbler:
"uid": "e3442342a",
"mac_address": "FF-AA-BB-AA-DD-AA",
==> /tmp/cobbler/CP01.txt <==
#Template for Cobbler:
"uid": "e43342f0a",
"mac_address": "00-AA-11-AA-11-EE",