awk: 필요한 열 수를 설정하시겠습니까?

awk: 필요한 열 수를 설정하시겠습니까?

다음 형식으로 간단한 conf 파일을 구문 분석하고 있습니다.

key = value

이를 위해 나는 awk다음과 같은 것을 사용합니다.

KEY=$(awk -F' *= *' '/^key/{print $2}' file.conf)

그러나 일부 값에는 기호가 포함될 수 있으므로 기본적으로 내가 원하는 것은 두 개의 열만 원한다고 =알려주는 것입니다 . 즉, 첫 번째 구분 기호 다음에 만나는 모든 것을 하나의 열로 받아들이도록 강제하는 것입니다. awk그런 옵션을 찾지 못했습니다. 어떻게 해야 하나요?

답변1

필드 내에 구분 기호가 나타날 수 있다면 이는 실제 구분 기호가 아닙니다. 나는 다음과 같은 것을 사용할 것입니다

KEY=$(sed -n '/^key *=/ { s/^key *= *//; p }' file.conf)

대신에 이것은 로 시작하는 줄을 찾고 key그 뒤에 공백과 =기호가 오는 것을 찾아서 줄의 시작 부분을 제거하고 인쇄합니다. ~처럼데이브 톰슨_085p조건이 될 수 있음 을 지적합니다 s.

KEY=$(sed -n 's/^key *= *//p' file.conf)

동등한 AWK는 다음과 같습니다.

KEY=$(awk '/^key *=/ { sub("^key *= *", ""); print }' file.conf)

동일한 조합 기술을 사용할 수 있습니다.

KEY=$(awk 'sub("^key *= *", "")' file.conf)

답변2

또 다른 변형입니다. 이번에는 grep을 사용합니다.

KEY=$(grep -Po  '^key\s*=\s*\K.*'  f.conf )

답변3

첫 번째 열 값을 꺼내십시오.

KEY=$(awk -F= '{$1="";sub("=","")}1' OFS="=" file.conf)

답변4

다음 명령을 사용하여 원하는 것을 얻을 수 있습니다.

KEY=$(awk -F 'key *= *' '{print $2}' f.conf)

관련 정보