내 스크립트에 두 개의 파일을 매개변수로 전달하고 싶습니다.
파일 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의 유효한 의견을 바탕으로 합니다.