awk
유용한 원 - 라이너 - CSV 등의 평균 계산
수색…
강력한 표 형식의 데이터 처리 (CSV 외)
awk 로 테이블 형식의 데이터를 처리하는 것은 입력이 올바르게 포맷 된 경우 매우 쉽습니다. 표 형식의 데이터를 생성하는 대부분의 소프트웨어는이 형식 계열의 특정 기능을 사용하며, 테이블 형식의 데이터를 처리하는 awk 프로그램은 특정 소프트웨어에서 생성 된 데이터에 고유 한 경우가 많습니다. 좀 더 일반적인 또는 강력한 솔루션이 필요한 경우, 가장 보편적 인 언어는 표 형식 데이터에있는 많은 기능을 제공하는 라이브러리를 제공합니다.
- 첫 번째 줄의 선택적 열 이름
- 인용 된 열 값과 인용되지 않은 열 값의 혼합
- 다양한 구분 기호
- 부동 소수점에 대한 지역화 된 형식
awk 를 사용하여 이러한 모든 기능을 명확하고 포괄적으로 처리 할 수는 있지만 가능한 것은 아닙니다.
표 형식 데이터에서 두 개의 열 교환
주어진 파일을 사용하여 ; 열 구분 기호로 사용됩니다. 제 1 및 제 2 칼럼을 허가하는 것은
awk -F';' -v 'OFS=;' '{ swap = $2; $2 = $1; $1 = swap; print }'
표 형식 데이터의 한 열에있는 값의 평균 계산
주어진 파일을 사용하여 ; 열 구분 기호로 사용됩니다. 우리는 두 번째 열의 값의 평균을 다음 프로그램으로 계산합니다. 제공된 입력은 학생 그룹의 성적 목록입니다.
awk -F';' '{ sum += $2 } END { print(sum / NR) }' <<EOF
Alice;2
Victor;1
Barbara;1
Casper;4
Deborah;0
Ernest;1
Fabiola;4
Giuseppe;4
EOF
이 프로그램의 출력은 2.125 입니다.
NR 은 처리되는 행의 번호를 보유한다는 것을 기억하십시오. 따라서 END 블록에서 파일의 총 행 수를 보유합니다.
많은 애플리케이션 (모니터링, 통계) 에서 중앙값은 훨씬 더 유용한 정보라는 것을 기억하십시오. 해당 예제를 참조하십시오.
표 형식 데이터의 특정 열 선택
우리는 파일을 다음과 같이 가정합니다. 열 구분 기호로 사용됩니다. 특정 열 세트를 선택하면 print 서술문 만 필요합니다. 예를 들어, 다음 프로그램은 입력에서 3, 4 및 7 열을 선택합니다.
awk -F';' -v 'OFS=;' '{ print $3, $4, $7 }'
인쇄 할 선을보다 신중하게 선택하는 것이 가능합니다. 다음 프로그램은 첫 번째 필드가 Alice 또는 Bob 때 해당 입력에서 3, 4 및 7 열을 선택합니다.
awk -F';' -v 'OFS=;' '($1 == "Alice") || ($1 == "Bob") { print $3, $4, $7 }'
표 형식 데이터에서 한 열의 값 중앙값 계산
주어진 파일을 사용하여 ; 열 구분 기호로 사용됩니다. 두 번째 열의 값의 중앙값은 GNU awk 용으로 작성된 다음 프로그램으로 계산합니다. 제공된 입력은 학생 그룹의 성적 목록입니다.
gawk -F';' '{ sample[NR] = $2 }
END {
asort(sample);
if(NR % 2 == 1) {
print(sample[int(NR/2) + 1])
} else {
print(sample[NR/2])
}
}' <<EOF
Alice;2
Victor;1
Barbara;1
Casper;4
Deborah;0
Ernest;1
Fabiola;4
Giuseppe;4
EOF
이 프로그램의 출력은 1 입니다.
NR 은 처리되는 행의 번호를 보유한다는 것을 기억하십시오. 따라서 END 블록에서 파일의 총 행 수를 보유합니다.
awk의 많은 구현에는 배열을 정렬하는 함수가 없으므로 위의 코드를 사용하기 전에 정의해야합니다.
두 패턴 사이의 선 세트 선택
패턴 매칭은 awk { pattern } { action } 을 따르는 액션을 제어 할 때 효과적으로 사용할 수 있습니다. 패턴 매칭의 한 멋진 사용은 말할 파일에 두 패턴 사이에 여러 선택하는 것입니다 patternA 및 patternB
$ awk '/patternA/,/patternB/' file
파일 내용이 다음과 같다고 가정하고 위의 패턴 사이에서만 선을 추출합니다.
$ cat file
This is line - 1
This is line - 2
patternA
This is line - 3
This is line - 4
This is line - 5
patternB
This is line - 6
$ awk '/patternA/,/patternB/' file
patternA
This is line - 3
This is line - 4
This is line - 5
patternB
위의 명령은 일치하는 행을 인쇄하는 것 이외의 특정 { action } 수행하지 않지만 행의 서브 세트 내의 특정 조치는 조치 블록 ( {} )과 함께 적용 할 수 있습니다.