Command-line options
-f progfile, --file progfile
메인 실행파일을 지정할 때 사용합니다.
이 옵션을 사용한 상태에서 명령행 상에서 quotes 을 이용해 코드를 작성하려면 -e
옵션을 사용해야 합니다.
여러번 사용할 수 있고 -
문자를 파일명에 사용할 경우 stdin
에서 입력을 받습니다.
-F fs, --field-separator fs
FS
값을 설정합니다.
-v var=val, --assign var=val
awk 에 변수값을 전달할 때 사용합니다. 여러 개를 사용할 수 있고 설정된 값은 BEGIN 블록에서도 사용할 수 있습니다.
-b, --characters-as-bytes
awk 는 기본적으로 텍스트 데이터를 다루는 프로그램이기 때문에 내부적으로 locale 에 따라서 multibyte characters 를 wide characters 로 converting 합니다. 하지만 이 옵션을 사용하면 데이터를 읽어 들일 때나, 프린트문으로 출력할 때 converting 없이 무조건 single-byte characters 로 취급합니다. 다시 말해서 원본 데이터에 아무런 손도 대지 않는 것입니다.
-d[file], --dump-variables[=file]
global 변수를 dump 해볼 때 사용합니다. 변수 type 과 value 가 표시되는데 함수 내에서 local 변수로 사용되야 될 변수가 실수로 global 변수가 되지 않았는지 살펴보는 용도로 활용할 수 있습니다. 옵션 인수인 파일명은 공백 없이 붙여야 되고 파일명을 제공하지 않을 경우는 awkvars.out 에 저장됩니다.
-D, --debug
awk 스크립트 파일을 디버깅할 때 사용합니다.
-e 'program-text', --source 'program-text'
명령행 상에서 quotes 을 이용해 직접 코드를 작성할 때 사용합니다.
보통은 이 옵션 없이도 코드를 작성할 수 있지만
-f
옵션을 이용해 메인 실행파일을 지정할 경우에는 이 옵션을 사용해야 됩니다.
-i
, -f
옵션은 명령행 상에 위치한 순서에 따라 실행되고 -e
옵션으로
작성한 코드는 마지막에 실행됩니다.
-E file, --exec file
이것은 awk 스크립트를 CGI 프로그램으로 사용할 경우 보안을 위한 옵션입니다.
기본적인 기능은 -f
옵션과 같지만 악의적인 사용자가 옵션 이나 변수값 전달,
-e
옵션을 이용한 소스코드 전달을 하지 못하게 합니다.
따라서 명령 라인에 사용된 인수는 처리되지 않고 스트링으로만 전달됩니다.
awk -f
는 -v
를 awk 옵션으로 인식해 오류가 발생하지만
awk -E
는 그대로 파일명으로 전달된다.
$ cat test.sh $ cat test.sh
#!/usr/bin/awk -E #!/usr/bin/awk -f
BEGINFILE { BEGINFILE {
print FILENAME print FILENAME
nextfile nextfile
} }
$ ./test.sh -v hello $ ./test.sh -v hello # 오류
-v awk: 'hello' argument to '-v' not in 'var=value' form
hello . . .
만약에 옵션을 추가하려면 다음과 같이 -E
옵션 전에 위치시키면 ARG 에 포함되지 않습니다.
$ cat test.sh
#!/usr/bin/env -S gawk -v AA=100 -E
BEGIN {
print "ARGC : " ARGC
print "ARGV[0] : " ARGV[0]
print "ARGV[1] : " ARGV[1]
print "AA : " AA
}
$ ./test.sh
ARGC : 1
ARGV[0] : gawk
ARGV[1] :
AA : 100
-g, --gen-pot
서비스 메시지의 국제화를 위한 기능으로 소스 코드에서 특정 형식으로 작성된 스트링 상수를 추출하여 pot 파일 ( GNU gettext portable object template file ) 을 생성합니다.
https://www.gnu.org/software/gawk/manual/html_node/I18N-Example.html
-i includefile, --include includefile
라이브러리 파일을 include 하기 위한 것으로 -f
옵션과 다르게 메인 실행파일로 인식하지 않습니다.
한번 파일이 로드되면 중복 사용될 경우 다시 로드되지 않습니다.
-f
옵션의 경우는 동일한 파일이 중복 사용될 경우 매번 실행됩니다.
@include
키워드와 같은 기능을 합니다.
-l library, --load library
확장 모듈을 로드해 사용합니다. AWKLIBPATH
환경 변수에서 모듈을 찾습니다.
-L[fatal|invalid], --lint[=fatal|invalid]
이 옵션을 사용하면 오류가 의심되는 코드에 대해 다양한 메시지를 출력합니다.
-M, --bignum
cpu 에서 하드웨어 적으로 제공하는 64bit fixed-precision arithmetic 대신에 소프트웨어 라이브러리를 이용한 arbitrary-precision arithmetic ( 또는 bignum arithmetic, multiple precision arithmetic, infinite-precision arithmetic ) 연산을 합니다. 사용 가능한 정밀도의 한계는 컴퓨터 메모리 크기에 제한을 받을 뿐입니다.
연산 결과 값이 53 bits 를 넘을 경우 이 옵션을 설정해야 합니다.
# 72057594037927935 (0xFFFFFFFFFFFFFF) 는 7 bytes 으로 56 bits 값
$ awk 'BEGIN { print 72057594037927935 + 1}'
72057594037927936
$ awk 'BEGIN { print 72057594037927935 + 2}'
72057594037927936 # 위와 동일한 값
$ awk 'BEGIN { print 72057594037927935 + 3}'
72057594037927936 # 위와 동일한 값
$ awk 'BEGIN { print 72057594037927935 + 4}'
72057594037927936 # 위와 동일한 값
# '-M' 옵션을 사용해야 정확한 값이 출력된다.
$ awk -M 'BEGIN { print 72057594037927935 + 4}'
72057594037927939
factorial 100 을 계산하는 것인데 -M
옵션을 사용해야 값이 정확해진다.
$ awk 'BEGIN { print fac(100) }
function fac (n, accum) {
accum = 1
while (n >= 2) accum *= n--
return accum
}'
9332621544394417535430725413964319024712932813229586249193...........
$ awk -M 'BEGIN { print fac(100) } # -M 옵션 사용
function fac (n, accum) {
accum = 1
while (n >= 2) accum *= n--
return accum
}'
9332621544394415268169923885626670049071596826438162146859..........
10,000 번째 피보나치수 구하기
$ awk 'BEGIN { print fibo(10000) }
function fibo (n, a, b, i) {
a = b = 1;
for (i = 3; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}'
+inf # +inf
$ awk -M 'BEGIN { print fibo(10000) } # -M 옵션 사용
function fibo (n, a, b, i) {
a = b = 1;
for (i = 3; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}'
3364476487643178326662161200510754331030214846068..........
-N, --use-lc-numeric
locale 에 따라서 decimal and thousands separators 문자가 다를 수 있는데 이 옵션을 사용하면 숫자 데이터를 locale 에 따라 해석하여 읽어 들입니다.
https://docs.oracle.com/cd/E19455-01/806-0169/overview-9/index.html
-o[file], --pretty-print[=file]
코드를 보기 좋게 포멧하여 출력합니다. dedugging 하기 위해 파일을 생성할 때 사용할 수 있습니다. 한가지 참고할 것은 스크립트가 실행이 되면서 결과가 출력된다는 점입니다. 옵션 인수인 파일명은 공백 없이 붙여야 되고 파일명을 제공하지 않을 경우는 awkprof.out 에 저장됩니다.
-O, --optimize
코드 최적화와 관련된 옵션인데 현재는 단순히 constant folding 만 포함됩니다.
-p[file], --profile[=file]
awk 는 profiling 기능도 제공합니다. 포함되는 정보는 execution counts for each statement 와 function call counts for each function 입니다. 옵션 인수인 파일명은 공백 없이 붙여야 되고 파일명을 제공하지 않을 경우는 awkprof.out 에 저장됩니다.
https://www.gnu.org/software/gawk/manual/html_node/Profiling.html
-P, --posix
POSIX mode 로 동작합니다. 다시 말해서 모든 gawk 확장 기능이 disable 됩니다.
-S, --sandbox
system() 함수의 사용, getline, 프린트 함수를 이용한 redirection, 확장 모듈 사용이 금지됩니다. 다시 말해서 입력에 사용되는 데이터 파일 외에는 시스템에 접근하지 못하게 하는 것입니다.