awk
문자열 조작 함수
수색…
통사론
- 색인 (크고 작음)
- 길이 또는 길이 ()
- 길이 (문자열)
- 일치 (문자열, 정규식)
- 분할 (문자열, 배열, 구분 기호)
- 분할 (문자열, 배열)
- sprintf (형식, ...)
- 하위 (정규식, subst, 문자열)
- 하위 (정규식, subst)
- gsub (정규식, subst)
- gsub (정규식, subst, 문자열)
- substr (문자열, 시작, 끝)
- substr (문자열, 시작)
- tolower (문자열)
- toupper (문자열)
매개 변수
| 매개 변수 | 세부 |
|---|---|
| 큰 | "little"으로 검색되는 문자열입니다. |
| 종료 | 하위 문자열을 끝낼 색인입니다. |
| 체재 | printf 형식 문자열. |
| 작은 | "big"으로 검색 할 문자열입니다. |
| 정규식 | 확장 정규 표현식 . |
| 스타트 | 하위 문자열을 시작할 인덱스입니다. |
| 끈 | 문자열. |
| subst | 일치하는 부분으로 대체 할 문자열입니다. |
문자열을 대문자로 변환
toupper 함수는 문자열을 대문자 (대문자)로 변환합니다. 예 :
BEGIN {
greeting = "hello"
loud_greeting = toupper(greeting)
print loud_greeting
}
이 코드는 실행할 때 "HELLO"를 출력합니다.
문자열 연결
문자열 연결은 연산자없이 표현식을 쓰는 것만으로 간단히 수행됩니다. 예 :
BEGIN {
user = "root"
print "Hello "user "!"
}
인쇄 할 것입니다 : Hello root!
표현식은 공백으로 구분할 필요가 없습니다.
문자열 해시 계산
awk 에서 표준 해싱 알고리즘 중 하나를 구현하는 것은 지루한 작업 일뿐 아니라 텍스트 문서의 핸들로 사용할 수있는 해시 함수를 정의하는 것이 훨씬 쉽습니다. 이러한 함수가 유용한 실제 상황은 설명을 제공하는 항목에 짧은 ID를 지정하는 것입니다 (예 : 테스트 사례). 짧은 ID는 긴 설명을 제공하는 대신 사용자가 항목에 대한 참조로 제공 할 수 있습니다.
해시 함수는 문자를 숫자 코드로 변환해야하며 스크립트의 시작 부분에서 초기화 된 찾아보기 테이블을 사용하여 수행됩니다. 그런 다음 해시 함수는 모듈 계산 알고리즘을 사용하여 계산됩니다. 모듈러 산술 변환은 해시 계산에 대한 매우 고전적인 접근 방식입니다.
데모 목적으로 입력 라인을 해시로 장식하는 규칙을 추가하지만이 규칙은 함수를 사용하는 데 필요하지 않습니다.
BEGIN{
for(n=0;n<256;n++) {
ord[sprintf("%c",n)] = n
}
}
function hash(text, _prime, _modulo, _ax, _chars, _i)
{
_prime = 104729;
_modulo = 1048576;
_ax = 0;
split(text, _chars, "");
for (_i=1; _i <= length(text); _i++) {
_ax = (_ax * _prime + ord[_chars[_i]]) % _modulo;
};
return sprintf("%05x", _ax)
}
# Rule to demonstrate the function
# These comments and the following line are not relevant
# to the definition of the hash function but illustrate
# its use.
{ printf("%s|%s\n", hash($0), $0) }
위의 프로그램을 hash.awk 파일에 저장하고 간단한 영어 서적 제목의 짧은 목록으로 보여줍니다.
awk -f hash.awk <<EOF
Wuthering Heights
Jane Eyre
Pride and Prejudice
The Mayor of Casterbridge
The Great Gatsby
David Copperfield
Great Expectations
The Return of the Soldier
Alice's Adventures in Wonderland
Animal Farm
EOF
출력은 다음과 같습니다.
6d6b1|Wuthering Heights
7539b|Jane Eyre
d8fba|Pride and Prejudice
fae95|The Mayor of Casterbridge
17fae|The Great Gatsby
c0005|David Copperfield
7492a|Great Expectations
12871|The Return of the Soldier
c3ab6|Alice's Adventures in Wonderland
46dc0|Animal Farm
필자가 좋아하는 소설 의 6948 비 공백 라인 각각에이 해시 함수를 적용하면 충돌이 발생하지 않습니다.
문자열을 소문자로 변환
AWK는 종종 문자열 목록을 포함하는 전체 파일을 조작하는 데 사용됩니다. awk_test_file.txt 파일에 다음 내용이 포함되어 있다고 가정 해 보겠습니다.
First String
Second String
Third String
모든 문자열을 소문자로 변환하려면 다음을 실행하십시오.
awk '{ print tolower($0) }' awk_test_file.txt
결과는 다음과 같습니다.
first string
second string
third string
문자열 텍스트 대체
SUB 함수는 awk 내부의 텍스트를 대체 할 수 있습니다.
하위 (정규 표현식, 대체, 대상)
regexp는 완전 정규 표현식 이 될 수 있습니다.
$ cat file
AAAAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG
$ awk '{sub("AAA","XXX", $0); print}' file
XXXAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG
하위 문자열 추출
GNU awk는 주 문자열에서 고정 길이 문자 시퀀스를 반환하는 하위 문자열 추출 기능을 지원합니다. 구문은 다음과 같습니다.
*substr(string, start [, length ])*
여기서 string 은 소스 문자열이고 start 는 선택적인 길이의 length 문자에 대해 추출을 수행하려는 하위 문자열 위치의 시작을 표시합니다. 길이가 지정되지 않으면, 추출은. 자열의 끝까지 수행됩니다.
문자열의 첫 번째 문자는 문자 1로 처리됩니다.
awk '
BEGIN {
testString = "MyTESTstring"
substring = substr(testString, 3, 4) # Start at character 3 for a length of 4 characters
print substring
}'
하위 문자열 TEST 출력합니다.
awk '
BEGIN {
testString = "MyTESTstring"
substring = substr(testString, 3) # Start at character 3 till end of the string
print substring
}'
이것은 문자 위치 3에서 전체 문자열의 끝까지 하위 문자열을 추출하여 TESTstring 반환 TESTstring
노트:-
-
start에 음수 값이 주어지면GNUawk는 전체 문자열을 출력하고length에 0이 아닌 값이 주어진다면GNUawk 동작은null문자열을 반환하며 동작은awk여러 구현에 따라 다릅니다.