여러 awk 함수 결합

여러 awk 함수 결합

여러 파일을 수정하고 있습니다. 이 세 가지 awk 함수를 하나의 코드로 결합하고 싶습니다.

for i in *.gw; do
awk '/ALPHA_BF :/{sub(/^ *[0-9.]+/,"        #J     #")};{print}' $i > $i.tpl
done

for i in *.gw; do
awk '/REVAPMN:/{sub(/^ *[0-9.]+/,"        #G     #")};{print}'$i> $i.tpl
done

for i in *.gw; do
awk '/GW_REVAP :/{sub(/^ *[0-9.]+/,"        #I     #")};{print}' $i > $i.tpl
done

답변1

for file in ./*.gw; do
    awk '
        /ALPHA_BF :/{sub(/^ *[0-9.]+/,"        #J     #")}
        /REVAPMN:/  {sub(/^ *[0-9.]+/,"        #G     #")}
        /GW_REVAP :/{sub(/^ *[0-9.]+/,"        #I     #")}
        { print }' "$file" > "$file.tpl"
done

변전소 섹션에 대한 단일 기능을 정의할 수 있습니다.

for file in ./*.gw; do
    awk 'function do_sub(r) { sub(/^ *[0-9.]+/, "        #"r"     #") }
        /ALPHA_BF :/{ do_sub("J") }
        /REVAPMN:/  { do_sub("G") }
        /GW_REVAP :/{ do_sub("I") }1
    ' "$file" > "$file.tpl"
done

답변2

루프용 쉘도 awk에 배치할 수 있습니다.

awk '
    FNR == 1     {close(outfile); outfile = FILENAME ".tpl"}
    /ALPHA_BF :/ {sub(/^ *[0-9.]+/,"        #J     #")}
    /REVAPMN:/   {sub(/^ *[0-9.]+/,"        #G     #")}
    /GW_REVAP :/ {sub(/^ *[0-9.]+/,"        #I     #")}
    {print > outfile}
' *.gw

답변3

아마도 awk 명령을 파이프 기호와 연결한다는 뜻일 것입니다. 이는 다양한 도구를 결합해야 하는 경우 유용할 수 있습니다. 모든 도구가 awk인 경우 다른 답변은 단 한 번의 awk 호출로 좋은 솔루션을 보여줍니다.

for i in *.gw; do
    awk '/ALPHA_BF :/{sub(/^ *[0-9.]+/,"        #J     #")};{print}' $i |
    awk '/REVAPMN:/{sub(/^ *[0-9.]+/,"        #G     #")};{print}' |
    awk '/GW_REVAP :/{sub(/^ *[0-9.]+/,"        #I     #")};{print}' > $i.tpl
done

관련 정보