Awk - 유용한 작은 언어
6549 단어 bashprogrammingshelllinux
awk
에 멋진 소개를 했습니다.Awk는 입력 파일을 일련의 라인으로 스캔하고 각 라인을 필드로 분할합니다. 필드 구분 기호는 일반적으로 공백이지만 모든 문자로 사용자 지정할 수 있습니다.
awk
프로그램은 일련의 패턴-동작 쌍입니다. 즉, 각 라인에 대해 패턴과 일치하는지 확인하고 일치하는 경우 해당 라인에서 관련 동작을 수행합니다. Awk는 대화식으로 사용하거나 저장된 프로그램을 실행하는 데 사용할 수 있습니다.다음은 Awk가 Python과 유사한 의사 코드로 작성된 것입니다.
initialize() # Initializes variables in BEGIN block
for line in input_lines: # Awk divides file / input into a list of lines
for condition, action in conditions: # A program is a list of condition-action pairs
if condition(line): #match line against condition
action() #perform action on match
다음은 Awk의 일부 작은 스니펫입니다.
1. 헬로월드!
프로그램을 인라인으로 또는 파일을 통해 실행할 수 있습니다
awk
.awk 'BEGIN{ print "Hello, World!"}'
또는 이것을 파일에 저장할 수 있습니다
hello.awk
.BEGIN{ print "Hello, World!"}
그런 다음
awk -f hello.awk
로 실행하십시오.2. CSV 읽기 및 특정 컬럼 출력
이제 유용한 일을 해봅시다! Los Angeles시의 우편번호별 2010년 인구 조사 데이터인 이 파일csv을 다운로드하십시오.
csv에서 처음 3줄을 읽습니다.
head -3 2010_Census_Populations_by_Zip_Code.csv
Zip Code,Total Population,Median Age,Total Males,Total Females,Total Households,Average Household Size
91371,1,73.5,0,1,1,1
90001,57110,26.6,28468,28642,12971,4.4
awk -F, '{print $2}' 2010_Census_Populations_by_Zip_Code.csv
를 사용하여 합계 열만 인쇄합니다.-F,
는 CSV 파일에서 필드를 가져오기 위해 쉼표로 분할해야 하므로 필드 구분 기호를 쉼표로 설정합니다. $n
를 사용하면 n번째 열의 값을 사용할 수 있습니다.3. 일부 통계 계산
Awk는 변수와 함수의 사용을 허용합니다. 도시 전체의 총인구를 계산하여 어떻게 사용하는지 알아보자.
# total.awk
{s += $2}
END {print "Total population:", s}
변수는 기본적으로 0으로 초기화됩니다. 여기서는 변수
s
를 사용하여 합계를 저장합니다.이 스크립트를
awk -F, -f total.awk 2010_Census_Populations_by_Zip_Code.csv
로 실행하면 다음과 같은 결과가 나타납니다. Total population: 10603988
특수 변수 및 내장 함수
Awk는 프로그램을 더 간결하게 만들기 위해 몇 가지 특수 변수와 함수를 사용합니다.
NF : 라인의 필드 수
NR : 줄 번호
$0 : 전체 입력 라인
길이: 문자열의 문자 수 제공
이제 전체 인구를 전체 가구로 나눈 평균 가구 크기를 계산합니다. 관심 있는 열은 $2와 $6입니다.
우리는 또한 우편번호당 평균 인구를 원합니다. 우리의 스크립트:
# stats.awk
{ s += $2; h += $6;}
END {print "Total population:", s, "\nTotal households:", h, "\nAverage household size:", s/h, "\nAverage population per zip code:", s/NR}
NR
는 총 줄 수를 알려줍니다. 그러나 우리는 헤더 라인을 원하지 않습니다. tail
명령을 사용하여 첫 번째 줄을 tail -n +2
로 건너뛸 수 있습니다. 실행tail -n +2 2010_Census_Populations_by_Zip_Code.csv | awk -F, -f total.awk
은 다음을 제공합니다.Total population: 10603988
Total households: 3497698
Average household size: 3.0317
Average population per zip code: 33241.3
4. 패턴 매칭
우리는 지금까지 awk로 몇 가지 유용한 작업을 수행했지만 가장 큰 강점인 패턴 일치를 무시했습니다. 필드 값, 정규식, 줄 번호를 기반으로 일치시킬 수 있습니다.
NR%2 == 0 {print $0}
. 여기서 $0은 전체 라인을 나타냅니다. $2 > 100000 {print $1}
$2 > 10000 && $7 > 4 { print $1}
인 모든 우편번호를 인쇄하십시오. 논리적 and 및 or을 각각 나타내는 &&
및 ||
를 사용하여 조건을 결합할 수 있습니다. 추가 읽기
Awk에는 더 많은 것이 있습니다. 다음은 몇 가지 참고 자료입니다.
Reference
이 문제에 관하여(Awk - 유용한 작은 언어), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rrampage/awk---a-useful-little-language-2fhf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)