2015-08-03 2 views
1

Образец файла Читаю взначения массива переписывается в простака

011084,31.0581,-87.0547, 25.9 AL BREWTON 3 SSE  
012813,30.5467,-87.8808, 7.0 AL FAIRHOPE 2 NE  
013160,32.8347,-88.1342, 38.1 AL GAINESVILLE LOCK  
013511,32.7017,-87.5808, 67.1 AL GREENSBORO  
013816,31.8700,-86.2542, 132.0 AL HIGHLAND HOME  
015749,34.7442,-87.5997, 164.6 AL MUSCLE SHOALS AP  
017157,34.1736,-86.8133, 243.8 AL SAINT BERNARD  
017304,34.6736,-86.0536, 187.5 AL SCOTTSBORO 

поглазеть код

#!/bin/gawk 

BEGIN{ 
FS=","; 
OFS=","; 
} 

{ 
print $1,$2,$3,$4 
station=""$1 #Forces to be string 

#Save latitude 
stationInfo[station][lat]=$2 
print "lat",stationInfo[station][lat] 

#Save longitude 
stationInfo[station][lon]=$3 
print "lon",stationInfo[station][lon] 

#Now try printing the latitude again 
#It will return the value of the longitude instead 
print "lat",stationInfo[station][lat] 

print "---------------" 
} 

Пример вывода

011084,31.0581,-87.0547, 25.9 AL BREWTON 3 SSE     
lat,31.0581 
lon,-87.0547 
lat,-87.0547 
--------------- 
012813,30.5467,-87.8808, 7.0 AL FAIRHOPE 2 NE     
lat,30.5467 
lon,-87.8808 
lat,-87.8808 
--------------- 

По какой-то причине значение, хранящееся в stationInfo[station][lat], перезаписывается долготой. Я в недоумении, что происходит в мире.

Я использую поглазеть 4.1.1 на Fedora 22

ответ

0

Ваша проблема заключается в том, что lon и lat являются переменными и оценить в пустую строку, так это назначение stationInfo[station][lat]=$2 и stationInfo[station][lon]=$3 назначаете stationInfo[station]["].

В этих (и других) строках нужно использовать lat и lon, чтобы использовать строки вместо переменных.

#!/bin/gawk 

BEGIN{ 
    FS=","; 
    OFS=","; 
} 

{ 
    print $1,$2,$3,$4 
    station=""$1 #Forces to be string 

    #Save latitude 
    stationInfo[station]["lat"]=$2 
    print "lat",stationInfo[station]["lat"] 

    #Save longitude 
    stationInfo[station]["lon"]=$3 
    print "lon",stationInfo[station]["lon"] 

    #Now try printing the latitude again 
    #It will return the value of the longitude instead 
    print "lat",stationInfo[station]["lat"] 

    print "---------------" 
} 
+0

Черт, я думал, что уже пробовал это. Но я сделал это сейчас, и это работает. Благодаря! – Yelneerg

Смежные вопросы