쉘 변수 가져 오기 awk
여러 가지 방법으로 수행 될 수 있습니다. 일부는 다른 것보다 낫습니다. 이것은 대부분을 다루어야합니다. 의견이 있으시면 아래에 남겨주세요. v1.5
사용 -v
(가장 좋은 방법은, 대부분의 휴대용)
사용 -v
옵션 : (PS는 뒤에 공백을 사용합니다 -v
. 또는 덜 휴대용 될 것입니다 예, awk -v var=
없습니다 awk -vvar=
)
variable="line one\nline two"
awk -v var="$variable" 'BEGIN {print var}'
line one
line two
이것은 most와 호환 가능해야하며 awk
변수는 BEGIN
블록에서도 사용할 수 있습니다.
여러 변수가있는 경우 :
awk -v a="$var1" -v b="$var2" 'BEGIN {print a,b}'
경고 . 에드 모튼이 글을, 이스케이프 시퀀스는 이렇게 해석됩니다 \t
진짜가된다 tab
가 아니라 \t
그게 당신이 검색 것입니다 경우. ENVIRON[]
통해 사용 하거나 액세스 하여 해결할 수 있습니다ARGV[]
추신 : 세 개의 세로 막대를 구분 기호로 |||
사용하려면 탈출 할 수 없으므로 사용하십시오.-F"[|][|][|]"
프로그램 / 함수 숙소에서 데이터를 가져 오는 예제 awk
(여기서는 날짜가 사용됨)
awk -v time="$(date +"%F %H:%M" -d '-1 minute')" 'BEGIN {print time}'
코드 블록 후 변수
awk
코드 다음에 변수를 얻습니다 . BEGIN
블록에 변수가 필요하지 않으면 제대로 작동합니다 .
variable="line one\nline two"
echo "input data" | awk '{print var}' var="${variable}"
or
awk '{print var}' var="${variable}" file
awk '{print a,b,$0}' a="$var1" b="$var2" file
- 이러한 방식으로
FS
각 파일마다 다른 필드 구분 기호 를 설정할 수도 있습니다.
awk 'some code' FS=',' file1.txt FS=';' file2.ext
- 코드 블록 뒤의 변수는
BEGIN
블록에 대해 작동하지 않습니다 .
echo "input data" | awk 'BEGIN {print var}' var="${variable}"
여기 끈
변수 를 지원하는 쉘 awk
의 here-string 을 사용하여 변수를 추가 할 수도 있습니다 (Bash 포함).
awk '{print $0}' <<< "$variable"
test
이것은 다음과 같습니다.
printf '%s' "$variable" | awk '{print $0}'
PS 변수를 파일 입력으로 취급합니다.
ENVIRON
입력
TrueY가 쓰는 것처럼 환경 변수ENVIRON
를 인쇄 하는 데 사용할 수 있습니다 . AWK를 실행하기 전에 변수를 설정하면 다음과 같이 인쇄 할 수 있습니다.
X=MyVar
awk 'BEGIN{print ENVIRON["X"],ENVIRON["SHELL"]}'
MyVar /bin/bash
ARGV
입력
스티븐 페니 (Steven Penny)는 다음과 ARGV
같이 데이터를 엉망으로 만들 수 있습니다 .
v="my data"
awk 'BEGIN {print ARGV[1]}' "$v"
my data
BEGIN뿐만 아니라 코드 자체로 데이터를 가져 오려면 :
v="my data"
echo "test" | awk 'BEGIN{var=ARGV[1];ARGV[1]=""} {print var, $0}' "$v"
my data test
코드 내 변수 : USE WITH주의
awk
코드 내에서 변수를 사용할 수는 있지만 지저분하고 읽기 어려우며 Charles Duffy
지적한 바와 같이이 버전은 코드 삽입의 희생자 일 수 있습니다. 누군가 변수에 나쁜 것을 추가하면 awk
코드의 일부로 실행됩니다 .
이것은 코드 내에서 변수를 추출하여 작동하므로 일부가됩니다.
당신이 확인하려면 awk
동적 변수를 사용하여 변경 것을, 당신은 이런 식으로 할 수 있지만 일반 변수를 사용하지 마십시오.
variable="line one\nline two"
awk 'BEGIN {print "'"$variable"'"}'
line one
line two
코드 삽입의 예는 다음과 같습니다.
variable='line one\nline two" ; for (i=1;i<=1000;++i) print i"'
awk 'BEGIN {print "'"$variable"'"}'
line one
line two
1
2
3
.
.
1000
awk
이 방법으로 많은 명령을 추가 할 수 있습니다 . 유효하지 않은 명령으로도 충돌이 발생합니다.
추가 정보 :
큰 따옴표 사용
변수를 큰 따옴표로 묶는 것이 좋습니다. "$variable"
그렇지 않으면 여러 줄이 긴 단일 줄로 추가됩니다.
예:
var="Line one
This is line two"
echo $var
Line one This is line two
echo "$var"
Line one
This is line two
큰 따옴표없이 얻을 수있는 다른 오류 :
variable="line one\nline two"
awk -v var=$variable 'BEGIN {print var}'
awk: cmd. line:1: one\nline
awk: cmd. line:1: ^ backslash not last character on line
awk: cmd. line:1: one\nline
awk: cmd. line:1: ^ syntax error
작은 따옴표로 변수의 값을 확장하지 않습니다.
awk -v var='$variable' 'BEGIN {print var}'
$variable
AWK 및 변수에 대한 추가 정보
이 FAQ를 읽으십시오 .