awk 스크립트 끝에서 1의 의미는 무엇입니까


19

나는이 awk 스크립트를 읽고 있었다

awk -F"=" '{OFS="=";gsub(",",";",$2)}1'

나는 1그것의 끝에 기능이 무엇인지 알고 싶다


당신은 또한 할 수 있습니다awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'
GypsyCosmonaut

답변:


24

awk프로그램이 상태 액션 쌍의 연속이다, 중괄호와 행동의 조건 인 외부 그들에 동봉된다. 조건이 0 또는 빈 문자열로 평가되면 거짓으로 간주되며, 다른 것은 참입니다 (초기화되지 않은 변수는 컨텍스트에 따라 0 또는 빈 문자열이므로 거짓입니다). 조건 또는 조치가 내포 될 수 있습니다. 조건이없는 중괄호는 (귀하의 시작과 같이) 실제 조건으로 간주되며 적중시 항상 실행되며, 조치가없는 조건은 조건이 충족되는 경우에만 행을 인쇄합니다.

1은 (중괄호 이전 작업에 의해 변경되었을 수 있습니다) 라인을 인쇄, 모든 라인의 기본 동작을 실행 귀하의 스크립트의 끝은없는 행동과 상태 (항상 true)입니다.


7

나는 이러한 유형의 지름길을 정말 싫어합니다. 와 같은 것을 읽을 때 이전 문장을 수정 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}
'

5

1 모든 줄을 인쇄하는 것을 의미합니다.

awk 문은 다음과 같이 작성합니다.

awk -F"=" '{OFS="=";gsub(",",";",$2);print $0;}'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.