try u.awk as
BEGIN { FS="|" ; } { n=split($5,A,"&") ; for ( i=1; i <= n ; i++ ) { printf "%d-th & at position %d\n",i,length(A[i])+i ; split(A[i],B,":") i; printf "\t%s"\t[%s] : %s\n"[%s]\n",B[1],B[2] ; } } given input as
column1|column2|column3|column4|variable1:value1 & variable2:value2 & variable3:value3 & variable4:value4|column6|column7| COLn1|COLn2|COLn3|COLn4||COLn6|COLn7| Tue Oct 13 10:56:50 CEST 2015 called with awk -f u.awk u
1-th & at position variable118 [variable1] : value1[value1 ] 2-th & at position 20 [ variable2variable2] : value2[value2 ] 3-th & at position 21 variable3 [ variable3] : value3[value3 ] 4-th & at position 21 variable4 [ variable4] : value4[value4] - note that empty 5th colum is treated in
for( .. )(as n is 0) - note also that white space are not treated.
- Updated to give
&'s position