
다음과 같은 입력 텍스트 파일(sample_simple.txt)이 있다고 가정해 보겠습니다.
3 1 10 1 6
9 4 2 4 1
9 2 2 2 1
다음 명령을 사용하면 awk '$0=$1" "$1*$2" "$3*$4' sample_simple.txt
다음과 같은 출력을 얻습니다.
3 3 10
9 36 8
9 18 4
그런 다음 다음 명령을 사용하면 awk '$1*$2" "$3*$4' sample_simple.txt
입력 파일에서 아무 것도 변경되지 않습니다.
3 1 10 1 6
9 4 2 4 1
9 2 2 2 1
명령 간의 유일한 변경 사항은 입니다 '$0=$1'
. 누구든지 이것을 설명할 수 있습니까?
답변1
실제로는 그렇지 않습니다 $0=$1
. 더 비슷하다고 생각해
$0 = ($1" "$1*$2" "$3*$4)
그래서
$0=$1" "$1*$2" "$3*$4
문자열 연결 결과를 $1" "$1*$2" "$3*$4
변수에 할당 $0
하고 기본 작업을 수행하는 {print $0}
반면
$1*$2" "$3*$4
$1*$2
및 $3*$4
(사이에 공백 포함 ) 의 결과를 연결하고 결과가 비어 있지 않은 문자열이기 때문에 " "
기본 작업을 수행합니다 . {print $0}
값은 $0
수정되지 않습니다.
답변2
갑자기
$0
전체 라인입니다- 라인은 즉석에서 변경될 수 있습니다
따라서
$1" "$1*$2" "$3*$4
3개의 필드 를 생성$1
하고$1*$2
$3*$4
$0=
결과는 줄에 배치되고암시적으로 인쇄됩니다(편집 참조).
편집하다 :
을 생략하면 $0=
출력 라인이 변경되지 않습니다.
Steeldriver가 지적했듯이 검색이 긍정적이므로 line은 prinetd입니다.