sed 명령을 사용하는 것 외에도 Linux 에는 awk 보다 강력한 텍스트 데이터 처리 도구가 있습니다. 1970 년대 후반에 탄생했으며 이는 많은 Linux 사용자에게 영향을 미치는 이유 중 하나 일 수 있습니다.
awk 명령의 이름은 어색한 단어에서 나온 것으로 추측되었습니다. 실제로이 순서에는 세 명의 디자이너가 있으며, 이들의 성은 Aho, Weingberger 및 Kernighan이며, Awk는 마스터의 성의 첫 글자에서 가져옵니다.
sed 명령과 유사하게, awk 명령은 파일을 한 줄씩 (1 행에서 마지막 행까지) 스캔하여 대상 텍스트를 포함하는 행을 찾습니다. 일치에 성공하면 사용자는 행에서 조작을 수행하려고합니다. 그렇지 않으면 올바르지 않습니다. 처리하십시오.
awk 명령의 기본 형식은 다음과 같습니다.
[root @ localhost ~] # awk [옵션] '스크립트 명령'파일 이름
이 명령에 일반적으로 사용되는 옵션과 각각의 의미가 표에 나와 있습니다.
표 awk 명령 옵션 및 의미
옵션 |
의미 |
-F fs |
입력 행으로 fs를 사용하여 구분 기호를 지정합니다 awk 명령의 기본 구분 기호는 공백 또는 탭입니다. |
-f 파일 |
명령 행에 직접 명령을 입력하는 대신 스크립트 파일에서 awk 스크립트 명령을 읽으십시오. |
-v var = val |
프로세스를 실행하기 전에 변수 var를 설정하고 장치에 초기 값 val을 지정하십시오. |
awk의 힘은 스크립트 명령으로, 다음과 같이 일치 규칙과 실행 명령의 두 부분으로 구성됩니다.
'일치 규칙 {execute command}'
여기서 일치하는 규칙은 sed 명령의 주소 부분과 기능이 동일하며 텍스트 내용의 특정 행에 스크립트 명령을 적용 할 수 있도록 지정하는 데 사용됩니다 ./demo/와 같은 문자열을 사용하여 데모 문자열이 포함 된 행을 볼 수 있습니다. 정규식이 지정되었습니다. 또한 전체 스크립트 명령은 작은 따옴표 ( '')로 묶고 실행 명령 부분은 중괄호 ({})로 묶어야합니다.
awk 프로그램이 실행될 때 실행 명령이 지정되지 않으면 기본적으로 일치하는 줄이 출력되고, 일치 규칙이 지정되지 않으면 텍스트의 모든 행이 기본적으로 일치합니다.
간단한 예를 들면 다음과 같습니다.
[root @ localhost ~] # awk '/ ^ $ / {print "Blank line"}'test.txt
이 명령 /^$/은 정규식으로, 텍스트의 빈 줄과 일치하는 기능이며, 동시에 명령이 print 명령으로 실행되는 것을 볼 수 있습니다.이 명령은 자주 사용됩니다. 매우 간단합니다. 즉, 지정된 텍스트입니다. 출력하십시오. 따라서 전체 명령의 기능은 test.txt에 N 개의 빈 줄이 있으면이 명령을 실행하면 N 개의 빈 줄이 출력됩니다.
Awk는 데이터 필드 변수를 사용합니다
awk의 주요 기능 중 하나는 텍스트 파일의 데이터를 처리하는 기능으로, 행의 각 데이터 요소에 변수를 자동으로 할당합니다.
기본적으로 awk는 텍스트 행에서 찾은 데이터 필드에 다음 변수를 지정합니다.
- $ 0은 전체 텍스트 줄을 나타냅니다.
- $ 1은 텍스트 행의 첫 번째 데이터 필드를 나타냅니다.
- $ 2는 텍스트 행의 두 번째 데이터 필드를 나타냅니다.
- $ n은 텍스트 행의 n 번째 데이터 필드를 나타냅니다.
앞에서 언급했듯이 awk에서 기본 필드 구분 기호는 공백 문자 (예 : 공백 또는 탭)입니다. 텍스트 줄에서 각 데이터 필드는 필드 구분 기호로 나뉩니다. awk는 한 줄의 텍스트를 읽을 때 각 데이터 필드를 사전 정의 된 필드 구분 기호로 나눕니다.
따라서 다음 예제에서 awk 프로그램은 텍스트 파일을 읽고 첫 번째 데이터 필드의 값만 표시합니다.
[root @ localhost ~] # cat data2.txt
한 줄의 테스트 텍스트
두 줄의 테스트 텍스트
세 줄의 테스트 텍스트
[root @ localhost ~] # awk '{print $ 1}'data2.txt
하나
둘
셋
프로그램은 $ 1 필드 변수를 사용하여 "각 텍스트 행의 첫 번째 데이터 필드 만 표시"를 나타냅니다. 물론 다른 필드 구분 기호를 사용하여 파일을 읽으려면 -F 옵션을 사용하여 수동으로 파일을 지정할 수 있습니다.
awk 스크립트 명령은 여러 명령을 사용합니다
Awk를 사용하면 여러 명령을 하나의 일반 프로그램으로 결합 할 수 있습니다. 명령 행의 프로그램 스크립트에서 여러 명령을 사용하려면 명령 사이에 세미콜론을 넣으십시오. 예를 들면 다음과 같습니다.
[root @ localhost ~] # echo "내 이름은 부자"| awk '{ $ 4 = "Christine"; print $ 0 }'
내 이름은 Christine입니다
첫 번째 명령은 필드 변수 $ 4에 값을 할당합니다. 두 번째 명령은 전체 데이터 필드를 인쇄합니다. 보시다시피 awk 프로그램은 원본 텍스트의 네 번째 데이터 필드를 출력의 새 값으로 바꿨습니다.
또한 한 번에 한 줄씩 프로그램 스크립트 명령을 입력 할 수도 있습니다.
[root @ localhost ~] # awk '{
> $ 4 = "Christine"
> print $ 0}'
내 이름은 Rich
내 이름은 Christine
시작을 나타내는 작은 따옴표를 사용한 후, bash 쉘은>를 사용하여 더 많은 데이터를 요구하며 끝 작은 따옴표가 입력 될 때까지 한 번에 한 줄에 하나의 명령을 추가 할 수 있습니다.
이 경우, 파일 이름이 명령 행에 지정되어 있지 않기 때문에 awk 프로그램은 데이터를 얻기 위해 사용자 입력이 필요하므로이 프로그램을 실행할 때 사용자가 텍스트를 입력 할 때까지 기다린 다음 프로그램을 종료하려면 그냥 누르십시오. Ctrl + D를 누르면됩니다.
Awk는 파일에서 프로그램을 읽습니다.
sed와 마찬가지로 awk를 사용하면 스크립트 명령을 파일에 저장 한 다음 명령 줄에서 다음과 같이 참조 할 수 있습니다.
[root @ localhost ~] # cat awk.sh
{print $ 1 "의 홈 디렉토리는"$ 6}입니다.
[root @ localhost ~] # awk -F : -f awk.sh / etc / passwd
루트의 홈 디렉토리는 / root
bin입니다. 홈 디렉토리는 / bin
데몬의 홈 디렉토리는 / sbin
adm의 홈 디렉토리는 / var / adm입니다.
lp의 홈 디렉토리는 / var / spool / lpd입니다
.
Christine의 홈 디렉토리는 / home / Christine
Samantha의 홈 디렉토리는 / home / Samantha
Timothy의 홈입니다. 디렉토리는 / home / Timothy입니다
awk.sh 스크립트 파일은 print 명령을 사용하여 / etc / passwd 파일의 홈 디렉토리 데이터 필드 (필드 변수 $ 6) 및 사용자 ID 데이터 필드 (필드 변수 $ 1)를 인쇄합니다. 프로그램 파일에서 하나의 명령이 한 줄에 배치되고 명령 사이에 세미콜론이 필요하지 않으면 여러 명령을 지정할 수도 있습니다.
Awk BEGIN 키워드
awk에서 스크립트 명령의 런타임을 지정할 수도 있습니다. 기본적으로 awk는 입력에서 한 줄의 텍스트를 읽은 다음 해당 줄의 데이터에 대해 프로그램 스크립트를 실행하지만 때로는 데이터를 처리하기 전에 일부 스크립트 명령을 실행해야 할 수도 있습니다.이 경우 BEGIN 키워드가 필요합니다.
BEGIN은 데이터를 읽기 전에 awk가 키워드 뒤에 지정된 스크립트 명령을 실행하도록합니다 (예 :
[root @ localhost ~] # cat data3.txt
1
행 2
행 3 행
[root @ localhost ~] # awk 'BEGIN {print "data3 파일 내용 :"}
> {print $ 0}'data3.txt
data3 파일 내용 :
1
호선 2
호선 3 호선
보시다시피 여기서 스크립트 명령은 두 부분으로 나뉘며, BEGIN 부분의 스크립트 명령은 awk 명령이 데이터를 처리하기 전에 실행되며 스크립트 명령의 두 번째 부분은 실제로 데이터를 처리하는 데 사용됩니다.
어크 엔드 키워드
BEGIN 키워드에 해당하는 END 키워드를 사용하면 일부 스크립트 명령을 지정할 수 있으며 데이터를 읽은 후 awk가이를 실행합니다.
[root @ localhost ~] # awk 'BEGIN {print "data3 파일 내용 :"}
> {print $ 0}
> END {print "End of File"}'data3.txt
data3 파일 내용 :
1
행 2
행 3 행
파일 끝
보시다시피, awk 프로그램이 파일의 내용을 인쇄 할 때 END의 스크립트 명령이 실행됩니다.
'IT's Life > Linux' 카테고리의 다른 글
리눅스 패키지 (소스 패키지와 바이너리 패키지) (0) | 2019.08.14 |
---|---|
리눅스 awk 명령 고급 사용법 완전한 해적 (0) | 2019.08.13 |
리눅스 sed 명령 고급 사용법 (0) | 2019.08.13 |
Linux sed command complete Raiders (상세 설명) (0) | 2019.08.12 |
자세한 Linux grep 명령 : 파일 내용 찾기 (0) | 2019.08.12 |