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
또한보십시오: