수색…


FS - 필드 구분 기호

awk에서 각 레코드를 여러 필드로 분할하는 데 사용됩니다.

echo "a-b-c
d-e-f" | awk 'BEGIN {FS="-"} {print $2}'

결과는 다음과 같습니다.

b
e

변수 FS-F 옵션을 사용하여 설정할 수도 있습니다.

echo "a-b-c
d-e-f" | awk -F '-' '{print $2}'

기본적으로 필드는 공백 (공백 및 탭)으로 구분되며 여러 공백 및 탭은 단일 구분 기호로 계산됩니다.

RS - 레코드 구분 기호

입력을 여러 레코드로 나눌 때 awk에서 사용합니다. 예 :

echo "a b c|d e f" | awk 'BEGIN {RS="|"} {print $0}'

생산 :

a b c
d e f

기본적으로 레코드 구분 기호는 개행 문자입니다.

마찬가지로 : echo "abc | de f"| awk 'BEGIN {RS = "|"} {print $ 2}'

생산 :

b
e

OFS - 출력 필드 구분 기호

print 문에 의해 출력 된 필드를 분리하기 위해 awk에 의해 사용된다. 예 :

echo "a b c
d e f" | awk 'BEGIN {OFS="-"} {print $2, $3}'

생산 :

b-c
e-f

기본값은입니다. , 단일 공백으로 구성된 문자열

ORS - 출력 레코드 구분 기호

awk가 레코드를 분리하기 위해 사용하며 모든 print 문 끝에서 출력됩니다. 예 :

echo "a b c
d e f" | awk 'BEGIN {ORS="|"} {print $2, $3}'

생산 :

b c|e f

기본값은 \n (개행 문자)입니다.

ARGV, ARGC - 명령 행 인수의 배열

awk에 전달 된 명령 행 인수는 ARGC 요소의 내부 배열 ARGV 에 저장됩니다. 배열의 첫 번째 요소는 프로그램 이름입니다. 예 :

awk 'BEGIN {
   for (i = 0; i < ARGC; ++i) {
      printf "ARGV[%d]=\"%s\"\n", i, ARGV[i]
   }
}' arg1 arg2 arg3

생산 :

ARGV[0]="awk"
ARGV[1]="arg1"
ARGV[2]="arg2"
ARGV[3]="arg3"

FS - 필드 구분 기호

변수 FS입력 필드 분리 문자 를 설정하는 데 사용됩니다. awk 에서는 공간과 탭이 기본 필드 분리 자로 사용됩니다. 해당 필드 값은 $1 , $2 , $3 ... 등을 통해 액세스 할 수 있습니다.

awk -F'=' '{print $1}' file
  • -F - 입력 필드 분리 기호를 설정하는 명령 행 옵션.
awk 'BEGIN { FS="=" } { print $1 }' file

OFS - 출력 필드 구분 기호

이 변수는 기본적으로 공백 인 출력 필드 구분 기호 를 설정하는 데 사용됩니다.

awk -F'=' 'BEGIN { OFS=":" } { print $1 }' file

예:

$ cat file.csv 
col1,col2,col3,col4
col1,col2,col3
col1,col2
col1
col1,col2,col3,col4,col5

$ awk -F',' 'BEGIN { OFS="|" } { $1=$1 } 1' file.csv
col1|col2|col3|col4
col1|col2|col3
col1|col2
col1
col1|col2|col3|col4|col5

할당 $1$1$1=$1 필드 (수정 $1 이 경우에)에 그리고 그 결과 awk 기록 재구성 $0 . 레코드를 재구성하면 구획 문자 FSOFS 바뀝니다.

RS - 입력 레코드 구분 기호

이 변수는 입력 레코드 분리 문자를 설정하는 데 사용됩니다. 기본값은 개행 문자입니다.

awk 'BEGIN{RS=","} {print $0}' file

ORS - 출력 레코드 구분 기호

이 변수는 출력 레코드 분리 문자를 설정하는 데 사용됩니다. 기본값은 개행 문자입니다.

awk 'BEGIN{ORS=","} {print $0}' file

NF - 필드 수

이 변수는 현재 입력 레코드의 총 필드 수를 제공합니다.

awk -F',' '{print NF}' file.csv

예:

$ cat file.csv 
col1,col2,col3,col4
col1,col2,col3
col1,col2
col1
col1,col2,col3,col4,col5
 
$ awk -F',' '{print NF}' file.csv 
4
3
2
1
5

NR - 총 레코드 수

현재 awk 인스턴스에서 처리 된 총 레코드 수를 제공합니다.

cat > file1
suicidesquad
harley quinn
joker
deadshot

cat > file2
avengers
ironman
captainamerica
hulk

awk '{print NR}' file1 file2
1
2
3
4
5
6
7
8

이 사례에서 총 8 건의 레코드가 처리되었습니다.

FNR - 파일의 레코드 수

awk 가 처리중인 파일을 기준으로 awk 인스턴스가 처리 한 총 레코드 수를 제공합니다.

cat > file1
suicidesquad
harley quinn
joker
deadshot

cat > file2
avengers
ironman
captainamerica
hulk

awk '{print FNR}' file1 file2
1
2
3
4
1
2
3
4

각 파일에는 각각 4 행이 있으므로 awkEOF 만날 때마다 FNR 은 0으로 재설정됩니다.

NF - 필드 수

각 레코드의 열 또는 필드 수를 제공합니다 (각 행에 해당하는 레코드). 각 줄은 RS 의해 경계 지어지며, 기본값은 줄 바꿈입니다.

cat > file1
Harley Quinn Loves Joker
Batman Loves Wonder Woman
Superman is not dead
Why is everything I type four fielded!?

awk '{print NF}' file1
4
4
4
7

FS (어딘가에 위)는 탭이나 공백으로 기본 설정됩니다. 그래서 할리, 퀸, 러브, 조커가 각각 기둥으로 간주됩니다. 이 경우는 다음 두 행에 적용되지만 마지막 행에는 7 개의 스페이스로 분리 된 단어가 있으며 이는 7 개의 열을 의미합니다.

FNR - 처리중인 현재 레코드 번호

FNR은 처리중인 입력 파일 행의 번호를 포함합니다. 이 예제에서는 두 번째 파일을 처리하기 시작할 때 awk가 1에서 다시 시작하는 것을 볼 수 있습니다.

하나의 파일이있는 예

$ cat file1
AAAA
BBBB
CCCC
$ awk '{ print FNR }' file1
1
2
3

두 개의 파일이있는 예

$ cat file1
AAAA
BBBB
CCCC
$ cat file2
WWWW
XXXX
YYYY
ZZZZ
$ awk '{ print FNR, FILENAME, $0 }' file1 file2
1 file1 AAAA
2 file1 BBBB
3 file1 CCCC
1 file2 WWWW
2 file2 XXXX
3 file2 YYYY
4 file2 ZZZZ

두 개의 파일이있는 확장 예제

FNRNR==FNR 이 첫 번째 파일에 대해서만 true이기 때문에 awk가 첫 번째 파일을 처리하고 있는지 여부를 감지하는 데 사용할 수 있습니다. 예를 들어 FNRfile1file2 파일의 레코드를 조인하려면 file1file2 .

$ awk 'NR==FNR { a[FNR]=$0; next } (FNR in a) { print FNR, a[FNR], $1 }' file1 file2
1 AAAA WWWW
2 BBBB XXXX
3 CCCC YYYY

FNRfile1file2 대해 다른 최대 값을 가지며 서로 다른 FNR 에 대한 조인이 없으므로 file2 레코드 ZZZZ 가 누락되었습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow