내가 시도한 내용은 다음과 같습니다(몇 가지 다른 반복과 함께). 파일의 조각
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