awk 명령 결과에서 문자열을 추출하고 출력 파일에 복사해야 합니다.

awk 명령 결과에서 문자열을 추출하고 출력 파일에 복사해야 합니다.

terraform.tfstate 파일에서 문자열을 추출하고 싶습니다.

다음 ack 명령을 실행 중입니다. ...

awk '/nifi1a/{x=1}x&&/private_ip/{print;exit}' terraform.tfstate

이 명령을 실행하면 다음과 같은 결과가 나타납니다.

"private_ip": "10.42.229.45",

두 번째 큰따옴표 세트 사이의 문자열을 추출하여 10.42.229.45출력 파일에 복사하고 싶습니다.

누구든지 이 작업을 수행하는 방법에 대한 지침/조언을 제공할 수 있습니까?

답변1

아마도 필요한 것은 다음과 같습니다:

awk -F'"' '/nifi1a/{f=1} f && /private_ip/{print $4; exit}' terraform.tfstate

그러나 예제 입력이 없으면 이것은 단지 추측일 뿐이며 코드의 원래 부분이 최적이 아닐 수 있으며 원하는 것을 달성하는 더 나은(보다 간결하고 이식 가능하며 강력한 등) 방법이 있을 수 있습니다.

귀하의 질문을 읽는 사람들이 "terraform.tfstate 파일"이나 다른 입력 형식이 무엇인지 알 것이라고 가정하지 마십시오. 항상 간결하고 테스트 가능한 예제 입력 및 예상 출력을 보여주시면 최선의 도움을 드릴 수 있습니다.

답변2

print문자열을 사용하여 split원하는 부분만 인쇄할 수 있습니다.

awk '/nifi1a/{x=1}x&&/private_ip/{split($0,a,"\""); print a[4];exit}' terraform.tfstate

결과를 처리하기 위해 두 번째 명령을 생성하려면 다음 명령을 사용할 수 있습니다.

awk '/nifi1a/{x=1}x&&/private_ip/{print;exit}' terraform.tfstate | awk -F\" '{print $4}'

아이디어는 큰따옴표를 "구분 기호로 사용하고 $0배열 내에서 분할하는 것입니다. 그런 다음 배열의 한 요소만 인쇄하십시오.

호스트 이름을 추가하려는 경우 명령은 다음과 같습니다.

awk '/nifi1a/{x=1}x&&/private_ip/{split($0,a,"\""); print a[4], "nifi1a";exit}' terraform.tfstate >>/etc/hosts

관련 정보