Awk - 변수를 다른 변수 이름의 일부로 사용하는 방법

Awk - 변수를 다른 변수 이름의 일부로 사용하는 방법

awk 명령에 사용되는 변수 목록이 있습니다. 스크립트에 전달되는 매개변수이므로 값이 정의되지 않지만 for 루프에서 사용하려고 합니다.

내 질문은 변수 값을 다른 변수 이름의 일부로 사용할 수 있습니까? 아니면 이것이 나쁜 생각인가요? 그렇다면 제가 취할 수 있는 다른 경로가 있나요?

awk -v var1=hi -v var2=howdy -v var3=greetings \
'BEGIN{for (i = 1; i <= 3; ++i) print var+i}'

원하는 출력

hi
howdy
greetings

답변1

awk나는 이것이 올바른 상황에서는 가능하지 않다고 생각합니다 .

그러나 gawk버전 4.1.0(2013년 5월) 이후의 GNU awk( )에는 SYMTAB키가 모든 전역 변수의 이름인 배열이 있으므로 다음과 같습니다.

gawk -v var1=hi -v var2=howdy -v var3=greetings '
  BEGIN { for (i=1; i<=3; i++) print SYMTAB["var"i] }
'
hi
howdy
greetings

답변2

값을 단일 문자열로 전달한 다음 문자열을 분할하고 해당 부분을 반복합니다.

awk -v delim=":" -v string='hi:howdy:greetings' '
    BEGIN {
        n = split(string, a, delim)
        for (i = 1; i <= n; ++i)
            print a[i]
    }'

delim위의 코드는 문자열에 사용되는 구분 기호를 지정하는 변수와 함께 문자열을 사용합니다 . 이것은 무엇이든 적용됩니다 awk.

다음과 같이 쉘 스크립트에서 위치 인수 목록과 같은 별도의 변수를 전달하려는 경우:

#!/bin/sh

IFS=:
awk -v delim="$IFS" -v string="$*" '
    BEGIN {
        n = split(string, a, delim)
        for (i = 1; i <= n; ++i)
            print a[i]
    }'

시험:

$ ./script.sh 1 2 3 "hello world"
1
2
3
hello world

또한보십시오:

관련 정보