이 awk 스크립트는 무엇을 합니까?

이 awk 스크립트는 무엇을 합니까?

이것은 무엇을 합니까?

( awk '{ if (NR > 1) print prev " " $1; prev = $1; }' file)

답변1

그것은 awk스크립트입니다.awk는 프로그래밍 언어이다필드로 구분된 데이터를 처리하는 데 특히 좋습니다. 스크립트 자체는 매우 간단합니다.

  • if (NR > 1): 현재 입력 라인의 라인 번호를 보유하는 NR특수 변수입니다 . awk따라서 이는 "현재 행 번호가 1보다 큰 경우", 즉 "첫 번째 행을 제외한 모든 행에 대해"를 의미합니다.
  • print prev " " $1;NR: 와 같지만 $1줄의 첫 번째 필드를 보유하는 특수 변수이기도 합니다. 필드는 공백으로 정의되므로(기본적으로 를 사용하여 변경할 수 있음 ) , will be 및 will be 와 -F같은 줄이 제공됩니다 . 따라서 이는 변수 값 (다음 지점 참조), 공백( ), 현재 행의 첫 번째 필드를 인쇄합니다.foo bar$1foo$2barprev" "
  • prev = $1;: 이 줄의 첫 번째 필드를 변수에 저장합니다 prev. 따라서 다음 행을 처리할 때 prev이전 행의 첫 번째 필드를 갖게 됩니다.

그 기능을 확인하려면 테스트 입력에서 시도해 볼 수 있습니다. 예를 들어 seq 5which를 사용하여 1부터 5까지의 숫자를 인쇄합니다.


$ seq 5
1
2
3
4
5
$ seq 5 | awk '{ if (NR > 1) print prev " " $1; prev = $1; }'
1 2
2 3
3 4
4 5

위에서 볼 수 있듯이 awk 스크립트는 이전 줄의 첫 번째 필드를 인쇄한 다음 현재 줄의 첫 번째 필드를 인쇄합니다.

답변2

입력 파일이 공백으로 구분된 파일이라고 가정합니다. 여기에 제공된 코드는 전체 파일을 읽고 한 줄의 첫 번째 열 값만 출력합니다.

예를 들면 input.txt다음과 같습니다:-

AAA 4443
BBB 5595
CCC 4949
DDD 4434

스크립트 awk는 다음을 출력합니다.

AAA BBB
BBB CCC
CCC DDD
DDD

첫 번째 행을 읽으면 첫 번째 행의 첫 번째 열인 AAA가 변수에 저장됩니다 prev. 두 번째 행을 읽으면 prev의 값, 즉 가 인쇄되고 AAA두 번째 행의 첫 번째 열이 인쇄되므로 가 됩니다 AAA BBB. 이제 BBB변수에 저장됩니다 prev. 3행을 읽으면 인쇄됩니다 BBB CCC. 4행을 읽으면 인쇄됩니다 CCC DDD.

관련 정보