awk: env 파일의 키 값을 어떻게 인쇄하나요?

awk: env 파일의 키 값을 어떻게 인쇄하나요?

이것이 제가 시도한 것입니다(그리고 몇 가지 다른 반복). 파일의 일부

APOLLO_KEY=service:abcd
cat packages/graph/.env | gawk '{ if ($0 = "APOLLO_KEY" ) { RS = "=" } ; { print $1 } }'

APOLLO_KEY파일의 각 행에 대한 값 대신 반환됩니다 . 내가 기대하고 얻고 싶은 가치는

service:abcd

이런 식으로 파일을 구문 분석하는 데 상당한 문제가 있다는 것을 알았습니다. 나는 단지 일회성 명령을 위해 이 작업을 수행하고 있으며 이 시점에서 내 잘못된 지식/인터넷 검색에 좌절감을 느꼈습니다.

답변1

gawk '{ if ($0 = "APOLLO_KEY" ) { RS = "=" } ; { print $1 } }'

$0 = "APOLLO_KEY"문자열을 에 할당하면 $0비교는 입니다 ==. 내 생각엔 당신이 바꿀 생각은 없는 것 같아기록여기에는 구분 기호가 RS있지만필드구분 기호 (그리고 명령줄에서 또는 명령줄에서 FS이를 수행해야 하므로 awk가 줄을 분할하기 전에 작동합니다). 또한 명시적으로 사용할 필요도 없습니다.-F-vFS=만약에여기서는 전체 코드 블록에 조건을 적용합니다.

단순한 데이터를 가정하면(전체 쉘 구문을 사용하는 데이터는 아닙니다!) 다음과 같이 작동합니다.

awk -F= '$1 == "APOLLO_KEY" { print $2 }'

값에 =부호가 포함되어 있으면 줄의 두 번째 필드만 사용하므로 이 내용이 중단됩니다.

그러한 값을 처리해야 하는 경우 한 가지 해결책은 첫 번째 =. 좀 더 깔끔하게 만들기 위해 코드 외부에 필드 이름을 전달할 수도 있습니다.

awk -v key=APOLLO_KEY -F= '$1 == key { sub(/^[^=]+=/, ""); print }'

답변2

awk -F "=" '{for(i=1;i<=NF;i++){if($i ~ /APOLLO_KEY/)print $(i+1)}}' filename

산출

service:abcd

관련 정보