파일에는 명령 목록이 포함되어 있으며 각 명령에는 변수의 문자열로 바꿔야 하는 문자열이 있습니다.

파일에는 명령 목록이 포함되어 있으며 각 명령에는 변수의 문자열로 바꿔야 하는 문자열이 있습니다.

내 스크립트에 두 개의 파일을 매개변수로 전달하고 싶습니다.

파일 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의 유효한 의견을 바탕으로 합니다.

관련 정보