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여기 에 구분 기호가 있지만대지구분 기호 ( awk가 줄을 분할하기 전에 작동하도록 명령줄에서 이를 사용 하거나 수행 FS해야 합니다 ). 게다가 명시적으로 사용할 필요도 없습니다.-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

관련 정보