2016-05-26 15 views
0

I wie unten einen Bash-Skript haben:Bash Scripting - Nested Loop-Punkt falsche Werte

day=(58 34 107 91 43 39 41 76 37 47 70 74 56 19 95 38 48 96 50 76 89 79 46 105 26 88 69 87 23 82 99 77 114 52 87 63 33 52 57 45 48 49 55 60 34 107 48 40 25 20 16) 

year=(1952 1953 1954 1955 1956 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004) 

for dom in $day; do 
    for yrs in $year; do 
      ncks -O -d time,$dom imdJJAS$yrs.nc ac_$yrs.nc 
    done 
done 

Grundsätzlich ich den Befehl NCKs NCO mit versuchen die Zeitdimension für jedes Jahr zu extrahieren, die Skripte laufen, aber die Ausgänge sind falsch. Für das Jahr 1951 wurde der 58. Zeitwert erfolgreich extrahiert, aber ab 1952 wird der letzte Wert im Tagesfeld (16) extrahiert, was nicht korrekt ist.

ive versuchte Einstellung {$day[a]} seit es ein Array ist, aber wenn ich dies verwendet, für alle Jahre in Extrakte den letzten Wert im Array statt.

Ich bin mir nicht sicher, was ich falsch mache, ich habe ein paar Post darüber gelesen, aber es scheint zu funktionieren.

Ich schätze jede Hilfe.

Prost!

Antwort

0

Wenn ich Ihre Absicht richtig verstehe, versuchen Sie, entsprechende Werte aus beiden Arrays zu verwenden. In diesem Fall benötigen Sie einen numerischen Index. for VAR in ARRAY iteriert über alle Werte des Arrays.

+0

wow, jemand hat Sie mit einem Kommentar abgelehnt. Was für eine kleine Bewegung von ihnen. – SaintHax

+0

ja, das unfaire @MichealVehrs Um Ihre Frage zu beantworten, ja das ist in der Tat meine Absicht. –

1

$array selbst wird auf das erste Element im Array erweitert. Zu erweitern, um die volle Array sollten Sie ${array[@]} verwenden:

for dom in "${day[@]}"; do 
    for yrs in "${year[@]}"; do 
      ncks -O -d "time,${dom}" "imdJJAS${yrs}.nc" "ac_${yrs}.nc" 
    done 
done 

Ich zitierte auch Ihre variable Erweiterungen und geändert $dom und $yrs-${dom} und ${yrs}. Letzteres ist getan, um zu verhindern, dass irrtümlich auf eine undefinierte Variable Bezug genommen wird $dom_abc ist nicht dasselbe wie ${dom}_abc

+0

Hallo andlrc, Vielen Dank für Ihre Hilfe, ich schätze es wirklich. Ich habe Ihren Code wie oben versucht, aber es scheint nur das letzte Element im Tag-Array für $ {Dom} zu verwenden. Das Jahr Array scheint korrekt ausgewählt zu sein, und ich fühle mich wie das Problem liegt mit der für Dom in "$ Tag [@]}"; Befehl ausführen. Ich weiß einfach nicht, was es ist, ich sah durch meine Tag-Array und es ist nichts falsch daran, dass ich –

+0

sehen kann Ich habe einen Fehler in meinen Jahren jedoch, ive vergessen, 1966 hinzuzufügen. Die Länge von jedem Array sind jetzt korrekt, aber es sieht immer noch so aus, als ob der letzte Wert im Tages-Array alle anderen Tag-Werte überschreibt. –

+0

@KarlChan Wohin beziehen Sie die Variable 'dom'? Außerhalb der Iteration? – andlrc