awk에 두 개의 숫자를 추가하는 기능

awk에 두 개의 숫자를 추가하는 기능

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에서는 배열을 통해 액세스할 수 있습니다(쉼표로 구분하기보다는 공백으로 구분해야 하지만).$2BEGINARGV

둘째, 내부 변수 역참조 구문 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}'

관련 정보