2017-12-14 41 views
1

첫 번째 "n"행 ("n"은 런타임에 변수가 전달됨)은 "n"개의 해당 배열에 저장해야하며 배열 이름은 arrayRow"NR"으로 지정해야합니다. 여기에서 NR은 내장 awk 변수입니다.어떻게 awk에서 동적으로 변수의 이름을 지정할 수 있습니까?

awk -F"," -v n=$Header_Count 'NR<=n{ 
split($0,**("arrayRow" NR)**) }' SampleText.txt 

따라서 첫 번째 행은 배열 arrayRow1에 저장해야합니다. 두 번째 행은 arrayRow2에 저장해야합니다 ... 어떻게 awk에서 동적 배열 이름을 만드는 방법에 대한 아이디어?

+2

gawk가있는 경우 배열 배열을 조사해야합니다. –

+2

아마 다차원 배열을 사용할 수 있습니다. https://www.gnu.org/software/gawk/manual/gawk.html#Multidimensional – kvantour

답변

2

쉘 변수가 awk 명령의 일부가되도록 확장하는 해킹 셸 루프 및 잘못된 코딩 방법 또는 숫자 arg 또는 유사한 것으로 하드 코드 된 사전 정의 된 배열을 채우는 함수가 없으면 수행 할 수 없습니다. 그것을 시도조차하지 마십시오.

$ awk -v n=3 ' 
NR<=n { for (i=1;i<=NF;i++) arrayRow[NR,i] = $i; nf[NR]=NF } 
END { 
    for (i in nf) { 
     for (j=1; j<=nf[i]; j++) { 
      print i, j, arrayRow[i,j] 
     } 
    } 
} 
' file 

:

$ cat file 
a b c 
d e 
f g h 
i j k 
l m 

$ awk -v n=3 ' 
NR<=n {arrayRow[NR][1]; split($0,arrayRow[NR]) } 
END { 
    for (i in arrayRow) { 
     for (j in arrayRow[i]) { 
      print i, j, arrayRow[i][j] 
     } 
    } 
} 
' file 
1 1 a 
1 2 b 
1 3 c 
2 1 d 
2 2 e 
3 1 f 
3 2 g 
3 3 h 

그렇지 않으면 당신은 어떤 AWK에서 의사 다차원 배열을 사용할 수 있습니다 : 당신이 나 GNU를 얻을 수있는 경우

는 대신 진정한 멀티 차원 배열을 사용한다 awk가 하지만 실제로는 다차원 배열이 필요하지 않습니다. 1 차원을 사용하고 필요할 때 문자열을 새로운 배열로 나눕니다.

+1

안녕하세요, 문제를 해결할 수 있습니까? 정말 도움이됩니다. 고마워. –

+0

반갑습니다. 다음에 수행 할 작업은 https://stackoverflow.com/help/someone-answers를 참조하십시오. –