문제

내 파일 수정을 수행하는 작은 awk 스크립트가 있습니다 (Java에게 .properties 아이디어를 제공하려면 파일). 이것은 많은 사용자에게 영향을 미치는 배포 스크립트의 일부입니다.

기본값을 설정하여 나머지 파일을 사용자의 환경 설정에 남겨두고 싶습니다. 이는 누락 된 경우 구성 라인을 추가하여 다른 모든 것을 그대로 남겨 두는 경우 수정을 의미합니다.

현재 나는 다음과 같은 것을 사용합니다.

# initialize
BEGIN {
  some_value_set      = 0
  other_value_set     = 0

  some_value_default  = "some.value=SOME VALUE"
  other_value_default = "other.value=OTHER VALUE"
}

# modify existing lines
{
  if (/^some\.value=.*/) 
  {
    gsub(/.*/, some_value_default)
    some_value_set = 1
  }
  else if (/^other\.value=.*/)
  {
    gsub(/.*/, other_value_default)
    other_value_set = 1
  }
  print $0
}

# append missing lines
END {
  if (some_value_set   == 0) print some_value_default
  if (other_value_set  == 0) print other_value_default
}

특히 제어하고 싶은 줄의 수가 커질 때, 이것은 점점 번거롭게 진행됩니다. 내 어색한 지식은 그다지 크지 않으며 위의 느낌 잘못 - 어떻게 이것을 간소화 할 수 있습니까?

추신 : 가능하면 Awk와 함께 머물고 싶습니다. Perl/Python/를 사용하는 것이 훨씬 쉬운 것을 권장하지 마십시오. :-)

도움이 되었습니까?

해결책

BEGIN {
    defaults["some.value"]  = "SOME VALUE"
    defaults["other.value"] = "OTHER VALUE"
}

{
    for (key in defaults) {
        pattern = key
        gsub(/\./, "\\.", pattern)
        if (match($0, "^" pattern "=.*")) {
            gsub(/=.*/, "=" defaults[key])
            delete defaults[key]
        }
    }
    print $0
}

END {
    for (key in defaults) {
        print key "=" defaults[key]
    }
}

다른 팁

내 어색은 녹슬 었으므로 실제 코드를 제공하지 않을 것입니다.

  • 정규 표현식 및 값으로 배열을 초기화하십시오.
  • 각 라인마다 배열을 반복하고 적절한 대체를 수행하십시오. 중고 항목을 청소하십시오.
  • 결국, 배열을 반복하고 남은 항목에 대한 라인을 추가하십시오.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top