답변:
안 awk
프로그램이 상태 액션 쌍의 연속이다, 중괄호와 행동의 조건 인 외부 그들에 동봉된다. 조건이 0 또는 빈 문자열로 평가되면 거짓으로 간주되며, 다른 것은 참입니다 (초기화되지 않은 변수는 컨텍스트에 따라 0 또는 빈 문자열이므로 거짓입니다). 조건 또는 조치가 내포 될 수 있습니다. 조건이없는 중괄호는 (귀하의 시작과 같이) 실제 조건으로 간주되며 적중시 항상 실행되며, 조치가없는 조건은 조건이 충족되는 경우에만 행을 인쇄합니다.
1
은 (중괄호 이전 작업에 의해 변경되었을 수 있습니다) 라인을 인쇄, 모든 라인의 기본 동작을 실행 귀하의 스크립트의 끝은없는 행동과 상태 (항상 true)입니다.
나는 이러한 유형의 지름길을 정말 싫어합니다. 와 같은 것을 읽을 때 이전 문장을 수정 awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
한다고 생각할 수 있습니다 1
. 또는 1
의 별칭 이라고 생각하면 {print}
기술적으로 올바르지 않습니다.
실제로 1
는 완전히 별개의 진술입니다. 다음과 같이 문장을 분리 할 수 있습니다.
awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1
'
각 awk 문 형식은 condition {action}
입니다. {action}
지정 되어 있지 않은 경우 기본 조치는 {print}
입니다. condition
지정 하지 않으면 기본 조건은 true
입니다.
여기에 0이 아니기 때문에 1
항상 평가되는 조건 true
이 있습니다. 은 action
생략되어 있으므로 기본이 {print}
수행됩니다. 다음과 같이 생각할 수 있습니다.
awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1!=0 {print}
'
awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'