awk 외부 변수 참조

OS/리눅스 & 유닉스 2012. 3. 20. 12:52
read a
echo $a | awk '{printf("%s",a)}'
위의 코드에서 주의하셔야 할 것은
awk 외부의 a와 awk 내부의 a는 전혀 다른 것으로
awk 내부의 a에는 값이 할당되어 있지 않기 때문에 아무것도 출력되지 않는 것입니다

위의 코드는 read a때문에 표준입력으로 부터 값을 입력받고 그 값을 a에 저장합니다
awk는 a변수에 저장된 값을 표준입력으로부터 입력받습니다(echo $a |)
그리고 a라는 또 다른 awk 내부의 변수를 출력합니다 awk 내부의 a에는 어떤 값도
할당되어 있지 않기 때문에 아무것도 출력하지 않습니다

그렇다면 이렇게 한번 해보죠
1 read a
2 echo $a | awk '{a=1;printf("%s\n",a)}'
3 echo $a
abcd를 입력하면
결과는
1
abcd
라고 나옵니다
외부의 a에는 abcd가
내부의 a에는 1이 저장이 됩니다
각각의 변수를 awk외부에서 내부에서 참조해서 출력합니다
 
그렇다면 awk의 내부에서 외부 변수 a의 값을 참조하는 방법이 없을까요?
아닙니다 있습니다

awk에서 외부 변수 a에 접근하는 방법 세가지 방법
방법1
read a
echo | awk -v a="$a" '{printf("%s",a)}'
또는
read a
awk -v a="$a" '{printf("%s",a)}'
대신 위 스크립트를 실행할때
변수a에 값을 저장하고 엔터를 두번 눌러준다
첫번째 엔터는 a변수에 입력을 마치기 위해서 
두번째 엔터는 awk에서 표준입력을 마치기 위해서 누르는 것입니다

방법2
read a
echo | awk '{printf("%s","'"$a"'")}'

방법3
read a
echo | awk '{printf("%s",a)}' a=$a


아래는 좀 다른데
이런 방법도 있습니다
read a
echo $a | awk '{printf "%s", $0}'

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

Four Ways to Pass Shell Variables in AWK  (0) 2012.03.20
shell file read line  (0) 2012.03.20
쉘 (shell) 프로그래밍  (0) 2012.03.20
apache config  (0) 2012.03.20
httpd.conf(apache)  (0) 2012.03.20
: