
이것은 새로운 awk 튜토리얼 시리즈의 첫 번째 기사입니다. 앞으로 몇 주 안에 awk의 모든 기능과 실제 사례를 다루는 여러 기사를 awk에 게시할 예정입니다.
이 기사에서는 7가지 실용적인 awk 인쇄 예제와 함께 기본적인 awk 작업 방법론을 검토해 보겠습니다.
참고: 이전 Sed 튜토리얼 시리즈를 꼭 검토해 보세요.
Awk 소개 및 인쇄 작업
Awk는 구조화된 데이터를 쉽게 조작하고 형식화된 보고서를 생성할 수 있는 프로그래밍 언어입니다. Awk는 작성자의 이름인 "A를 나타냅니다. 아, 여 아인베르거 및 K 어니한”
Awk는 주로 패턴 스캐닝 및 처리에 사용됩니다. 하나 이상의 파일을 검색하여 지정된 패턴과 일치하는 행이 포함되어 있는지 확인한 다음 관련 작업을 수행합니다.
Awk의 주요 기능 중 일부는 다음과 같습니다:
- Awk는 텍스트 파일을 레코드와 필드로 봅니다.
- 일반적인 프로그래밍 언어와 마찬가지로 Awk에는 변수, 조건 및 루프가 있습니다.
- Awk에는 산술 연산자와 문자열 연산자가 있습니다.
- Awk는 형식화된 보고서를 생성할 수 있습니다
Awk는 파일이나 표준 입력에서 읽고 표준 출력으로 출력합니다. Awk는 텍스트가 아닌 파일과는 잘 어울리지 않습니다.
Syntax:
awk '/search pattern1/ {Actions}
/search pattern2/ {Actions}' file 위의 awk 구문에서:
- 검색 패턴은 정규 표현식입니다.
- 작업 – 수행할 명령문
- Awk에서는 다양한 패턴과 동작이 가능합니다.
- 파일 – 입력 파일.
- 프로그램 주위에 작은따옴표를 사용하면 쉘이 특수 문자를 해석하지 못하게 됩니다.
Awk 작업 방법
- Awk는 입력 파일을 한 번에 한 줄씩 읽습니다.
- 각 줄에 대해 주어진 순서대로 주어진 패턴과 일치하며, 일치하는 경우 해당 작업을 수행합니다.
- 일치하는 패턴이 없으면 아무 작업도 수행되지 않습니다.
- 위 구문에서 검색 패턴이나 작업 중 하나는 선택 사항이지만 둘 다는 아닙니다.
- 검색 패턴이 제공되지 않으면 Awk는 입력의 각 줄에 대해 지정된 작업을 수행합니다.
- 작업이 지정되지 않은 경우 기본 작업인 지정된 패턴과 일치하는 모든 줄을 인쇄합니다.
- 아무 작업도 하지 않고 빈 중괄호를 사용하면 아무 작업도 수행되지 않습니다. 기본 인쇄 작업을 수행하지 않습니다.
- 작업의 각 문은 세미콜론으로 구분되어야 합니다.
다음 내용을 포함하는 Employee.txt 파일을 생성해 보겠습니다.
아래에 언급된 예입니다.
$cat employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
Awk 예 1. Awk의 기본 동작
기본적으로 Awk는 파일의 모든 줄을 인쇄합니다.
$ awk '{print;}' employee.txt
100 Thomas Manager Sales $5,000
200 Jason Developer Technology $5,500
300 Sanjay Sysadmin Technology $7,000
400 Nisha Manager Marketing $9,500
500 Randy DBA Technology $6,000
위의 예제에서는 패턴이 제공되지 않습니다. 따라서 작업은 모든 라인에 적용 가능합니다.
인수 없이 인쇄하는 작업은 기본적으로 전체 줄을 인쇄합니다. 그래서 그것은 모든 것을 인쇄합니다
실패하지 않은 파일의 행. 작업은 중괄호로 묶어야 합니다.
Awk 예 2. 패턴과 일치하는 줄을 인쇄합니다.
$ awk '/Thomas/ > /Nisha/' employee.txt 100 Thomas Manager Sales $5,000 400 Nisha Manager Marketing $9,500
위의 예에서는 'Thomas' 또는 'Nisha'와 일치하는 모든 줄을 인쇄합니다. 두 가지 패턴이 있습니다. Awk는 여러 패턴을 허용하지만 각 세트(패턴 및 해당 동작)는 줄바꿈으로 구분해야 합니다.
Awk 예 3. 특정 필드만 인쇄합니다.
Awk에는 수많은 내장 변수가 있습니다. 각 레코드, 즉 라인에 대해 기본적으로 공백 문자로 구분된 레코드를 분할하여 $n 변수에 저장합니다. 라인에 4개의 단어가 있으면 $1, $2, $3 및 $4에 저장됩니다. $0은 전체 라인을 나타냅니다. NF는 레코드의 총 필드 수를 나타내는 내장 변수입니다.
$ awk '{print $2,$5;}' employee.txt
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000
$ awk '{print $2,$NF;}' employee.txt
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000 위의 예에서 $2와 $5는 각각 이름과 급여를 나타냅니다. $NF를 사용하여 급여를 얻을 수도 있습니다. 여기서 $NF는 마지막 필드를 나타냅니다. print 문에서 ','는 연결자입니다.
Awk 예시 4. 초기화 및 최종 조치
Awk에는 BEGIN 및 END라는 키워드로 지정되는 두 가지 중요한 패턴이 있습니다.
Syntax:
BEGIN { Actions}
{ACTION} # Action for everyline in a file
END { Actions }
# is for comments in Awk
BEGIN 섹션에 지정된 작업은 입력에서 줄 읽기를 시작하기 전에 실행됩니다.
END 작업은 입력에서 라인 읽기 및 처리를 완료한 후 수행됩니다.
$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";}
> {print $2,"\t",$3,"\t",$4,"\t",$NF;}
> END{print "Report Generated\n--------------";
> }' employee.txt
Name Designation Department Salary
Thomas Manager Sales $5,000
Jason Developer Technology $5,500
Sanjay Sysadmin Technology $7,000
Nisha Manager Marketing $9,500
Randy DBA Technology $6,000
Report Generated
-------------- 위의 예에서는 보고서의 헤드라인과 마지막 파일을 인쇄합니다.
Awk 예 5. 직원 ID가 200보다 큰 직원 찾기
$ awk '$1 >200' employee.txt 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
위의 예에서 첫 번째 필드($1)는 직원 ID입니다. 따라서 $1이 200보다 크면 기본 인쇄 작업을 수행하여 전체 줄을 인쇄하면 됩니다.
Awk 예 6. 기술 부서 직원 목록 인쇄
이제 부서 이름을 네 번째 필드로 사용할 수 있으므로 $4가 "Technology" 문자열과 일치하는지 확인하고, 일치하는 경우 해당 행을 인쇄합니다.
$ awk '$4 ~/Technology/' employee.txt 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 500 Randy DBA Technology $6,000
~ 연산자는 정규식과 비교하기 위한 것입니다. 기본 작업과 일치하면 전체 줄 인쇄가 수행됩니다.
Awk 예 7. 기술 부서의 직원 수를 출력하세요
아래 예에서는 부서가 기술인지 확인하고, 그렇다면 작업에서 BEGIN 섹션에서 0으로 초기화된 count 변수를 증가시킵니다.
$ awk 'BEGIN { count=0;}
$4 ~ /Technology/ { count++; }
END { print "Number of employees in Technology Dept =",count;}' employee.txt
Number of employees in Tehcnology Dept = 3 그런 다음 프로세스가 끝나면 기술 부서의 직원 수를 알려주는 count 값을 인쇄하세요.
추천 도서
<강한>
Sed 및 Awk 101 해킹, 작성자:Ramesh Natarajan . 저는 하루에 몇 시간씩 UNIX/Linux 환경에서 텍스트 파일(데이터, 구성, 로그 파일)을 다루며 보냅니다. 나는 모든 텍스트 조작 작업에 Sed와 Awk를 사용합니다. 내 Sed 및 Awk 경험을 바탕으로 UNIX/Linux 생활을 향상시킬 Sed 및 Awk의 다양한 고급 기능에 대한 101개의 실제 사례가 포함된 Sed 및 Awk 101 Hacks eBook을 작성했습니다. Sed와 Awk를 몇 년 동안 사용해 오셨지만 이 책을 읽지 않으셨다면, 부디 이 책을 읽어보시기 바랍니다. Sed 및 Awk 유틸리티의 기능에 놀라게 될 것입니다.
추가 Awk 기사
- 3가지 실제 예가 포함된 Awk 사용자 정의 변수
- 8개의 강력한 Awk 내장 변수 - FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
- 7가지 강력한 Awk 연산자 예(단항, 이진, 산술, 문자열, 할당, 조건부, Reg-Ex Awk 연산자)
- 4 Awk If 문 예( if, if else, if else if, :? )
- 루프에 갇히셨나요? Awk While, Do While, For 루프, 중단, 계속, 종료 예