add.awk
함수가 포함된 awk 파일이 있습니다 add(num1,num2)
. 명령줄에서 입력을 받고 싶습니다.
#!/bin/awk -f
function add(num1,num2)
{
print $num1 + $num2
}
BEGIN {
add($1,$2)
}
그러나 다음을 사용하여 add.awk 파일을 실행하려고 하면:
./add.awk 5,6
항상 값 0을 인쇄합니다.
입력을 지정하는 방식에 문제가 있나요?
답변1
여러 가지 문제가 있는 것 같아요
첫째, 내가 아는 한 블록 내에서는 명령줄 매개변수를 사용할 수 없습니다 $1
. 그러나 적어도 GNU awk에서는 배열을 통해 액세스할 수 있습니다(쉼표로 구분하기보다는 공백으로 구분해야 하지만).$2
BEGIN
ARGV
둘째, 내부 변수 역참조 구문 num1
은 가 아닙니다 $num1
.
그래서 당신은 할 수 있습니다
#!/usr/bin/awk -f
function add(num1,num2)
{
print num1 + num2
}
BEGIN {
add(ARGV[1],ARGV[2])
}
그럼 전화해
$ ./add.awk 5 6
11
정말로 사용하려면 내부적으로 배열로 분할 ./add.awk 5,6
해야 합니다 .ARGV[1]
#!/usr/bin/awk -f
function add(num1,num2)
{
print num1 + num2
}
BEGIN {
split(ARGV[1],a,",");
add(a[1],a[2])
}
$ ./add.awk 5,6
11
답변2
awk는 입력 스트림에서 읽고 있지만 아무것도 없기 때문에 0을 인쇄합니다.
스크립트에 입력을 제공하려면 다음을 사용할 수 있습니다.
echo 5 6 | awk '{ print $1 + $2}'