여러 파일을 수정하고 있습니다. 이 세 가지 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