2016-10-01 8 views
0

나중에 HTML을 생성하기 위해 각 필드에 변수를 지정해야합니다. 내 데이터 파일은 다음과 같습니다AWK : 각 필드에 변수 할당

field1;field2;field3    # << RECORD 1 
this;is;second;record    # << RECORD 2 

레코드 수에 따라 각 레코드에 대한 배열을 생성하는 방법이 있나요? 그래서 arrayNR, 마찬가지로 : 다른 AWKS와

gawk -F\; '{for(i=1;i<=NF;i++)a[NR][i]=$i}END {for(i in a) for (j in a[i]) print a[i][j]}' file 

당신이 사용할 수 있습니다 :

GNU와
array1[0] = "field1"; array1[1] = "field2"; 
    ^record number 
array2[0] = "this"; array2[1] = "is"; array2[2] = "second"; array2[3] = "record" 
    ^record number 
+0

표준 Awk를 사용해야하는 경우, 각 행을 배열에 할당하고 필요할 때 다시 분할하는 것이 합리적이지 않습니까? 또는 "2 : 3"과 같은 키를 가진 연관 배열을 만들어 두 번째 줄의 세 번째 값을 식별하십시오. yu가 필요하다면 세부 정보를 게시 할 수 있지만 추천할만한 해결책은 Awk에서 전환하는 것입니다. – tripleee

답변

2

은 awk가 다차원 배열과 split을, 예 :

$ awk '{array[NR][1]; split($0,array[NR],";"); for(i in array[NR]) print array[NR][i]}' file 

{ 
    array[NR][1]    # initiate array 
    split($0,array[NR],";") # split to array 
     for(i in array[NR]) # iterate thru all array elements 
      print array[NR][i] # output array value 
} 
+0

+1, 'array [NR] [1]'트릭이 split 명령어 전에 배열을 초기화한다. 그렇지 않으면 split은'두 번째 인수가 배열이 아니다 '라고 불평합니다. – user000001

0

당신이 다차원 배열 할 수 있습니다 awk가은 GNU를 사용하여

awk -F\; '{for(i=1;i<=NF;i++)a[NR,i]=$i}END {for(i in a) {split(i,b,SUBSEP); print a[b[1],b[2]]}}' file