Linux에서 awk 명령을 사용하는 방법

Linux에서 awk는 명령줄 텍스트 조작 발전기이자 강력한 스크립팅 언어입니다. 다음은 가장 멋진 기능에 대한 소개입니다.

어떻게 awk가 그 이름을 얻었습니까?

awk 명령의 이름은 1977년에 원본 버전을 작성한 세 사람의 이니셜을 사용하여 명명되었습니다. 알프레드 아호, 피터 와인버거, 그리고 브라이언 커니건. 이 세 사람은 전설의 AT&T 벨 연구소 유닉스 판테온. 그 이후로 많은 다른 사람들의 공헌으로 awk는 계속해서 발전해 왔습니다.

이것은 완전한 스크립팅 언어일 뿐만 아니라 명령줄을 위한 완전한 텍스트 조작 도구입니다. 이 글이 식욕을 돋우면 모든 세부 사항을 확인하십시오 awk와 그 기능에 대해.

규칙, 패턴 및 작업

awk는 패턴과 동작으로 구성된 규칙을 포함하는 프로그램에서 작동합니다. 패턴과 일치하는 텍스트에서 작업이 실행됩니다. 패턴은 중괄호({})로 묶입니다. 패턴과 액션이 함께 규칙을 형성합니다. 전체 awk 프로그램은 작은따옴표(‘)로 묶여 있습니다.

가장 간단한 유형의 awk 프로그램을 살펴보겠습니다. 패턴이 없으므로 입력된 모든 텍스트 행과 일치합니다. 이것은 액션이 모든 라인에서 실행된다는 것을 의미합니다. 잘 의 출력에 사용 누구 명령.

다음은 who의 표준 출력입니다.

who

그만큼

아마도 우리는 그 모든 정보가 필요하지 않고 오히려 계정에 있는 이름을 보고 싶을 것입니다. who의 출력을 awk로 파이프한 다음 awk에게 첫 번째 필드만 인쇄하도록 지시할 수 있습니다.

기본적으로 awk는 필드를 공백, 줄의 시작 또는 줄의 끝으로 둘러싸인 문자열로 간주합니다. 필드는 달러 기호($)와 숫자로 식별됩니다. 따라서 $1은 첫 번째 필드를 나타내며 첫 번째 필드를 인쇄하기 위해 인쇄 작업과 함께 사용할 것입니다.

다음을 입력합니다.

who | awk '{print $1}'

awk는 첫 번째 필드를 인쇄하고 행의 나머지 부분을 버립니다.

원하는 만큼 필드를 인쇄할 수 있습니다. 쉼표를 구분 기호로 추가하면 awk는 각 필드 사이에 공백을 인쇄합니다.

사용자가 로그인한 시간(필드 4)도 인쇄하기 위해 다음을 입력합니다.

who | awk '{print $1,$4}'

몇 가지 특수 필드 식별자가 있습니다. 다음은 전체 텍스트 줄과 텍스트 줄의 마지막 필드를 나타냅니다.

  "IM 및 통화가 Microsoft Teams로 전송됩니다"를 수정하는 방법

$0: 텍스트의 전체 줄을 나타냅니다.
$1: 첫 번째 필드를 나타냅니다.
$2: 두 번째 필드를 나타냅니다.
$7: 일곱 번째 필드를 나타냅니다.
$45: 45번째 필드를 나타냅니다.
$NF: “필드 수”를 나타내며 마지막 필드를 나타냅니다.

다음을 입력하여 짧은 인용문이 포함된 작은 텍스트 파일을 불러옵니다. 데니스 리치:

cat dennis_ritchie.txt

그만큼

우리는 awk가 인용문의 첫 번째, 두 번째, 마지막 필드를 인쇄하기를 원합니다. 터미널 창에 둘러 쌓여 있지만 한 줄의 텍스트일 뿐입니다.

다음 명령을 입력합니다.

awk '{print $1,$2,$NF}' dennis_ritchie.txt

우리는 그 “단순함”을 모릅니다. 는 텍스트 줄의 18번째 필드이며 우리는 상관하지 않습니다. 우리가 아는 것은 그것이 마지막 필드이고 $NF를 사용하여 값을 얻을 수 있다는 것입니다. 마침표는 단지 ​​다른 문자로 간주됩니다.