J'essaye d'extraire certaines variables des fichiers netcdf. Le code suivant fonctionne si je l'applique à un seul fichier:
ncks: ERROR received 4 filenames; need no more than two
Voir aussi la question: Hyperslab d'une variable netcdf 4D utilisant ncks pour l'explication. Maintenant, je veux utiliser ce code sur plusieurs fichiers .nc avec les noms suivants:
# !bin/bash for ((x=1;x<=3;x+=1)) do ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 2009120800000$x.nc testU.nc done
J'ai essayé la boucle suivante:
20091208000001.nc 20091208000002.nc 20091208000003.nc
J'obtiens l'erreur
ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 20091208000001.nc testU.nc
Comment obtenir la boucle pour extraire uniquement d'un fichier à la fois, puis ajouter la sortie extraite de tous les fichiers dans un seul fichier de sortie?
4 Réponses :
Je vois quelques erreurs dans votre script, mais rien qui puisse entraîner votre erreur réelle.
Il y a une virgule dans la condition for
qui devrait être un point-virgule
ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 20091208000001.nc testU.nc ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 20091208000002.nc testU.nc ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 20091208000003.nc testU.nc
Lorsque je préfère echo
à la commande que vous voulez exécuter, j'obtiens ce résultat:
#!/bin/bash for ((x=1;x<=3;x+=1)) do ncks -C -F -d nj_u,151,152,1 ni_u,234,235,1 -v vel_u 2009120800000$x.nc testU.nc done
Trois appels avec un fichier unique chacun. Ce code fonctionne. On dirait qu'il y a autre chose. Êtes-vous en train de simplifier votre code ou de nous montrer le code complet?
J'ai corrigé les erreurs, toujours la même erreur. J'utilise bash namescript.sh pour l'exécuter.
@Jellyse J'ai mis à jour ma réponse avec le résultat que j'obtiens.
C'est littéralement mon code complet dans le fichier testing.sh Le dossier ne contient que ces trois fichiers et le fichier testing.sh. Est-il possible que le nco ne soit pas correctement installé?
Ok je l'ai réinstallé, toujours la même erreur. La seule chose à laquelle je peux penser, c'est que quelque part sur mon ordinateur, il y a un autre fichier avec le même nom et c'est pourquoi il est confus.
@Jellyse, ajoutez echo
à votre commande ( echo ncks -C ......
) et vérifiez la sortie. La présence d'autres fichiers portant le même nom sur l'ordinateur ne devrait pas provoquer cette erreur.
J'obtiens exactement la même chose que vous quand je fais des échos ncks ... (pas d'erreurs) mais le fichier testU.nc n'est pas créé.
Non, avec le echo
vous obtenez la commande qui sera exécutée, mais elle n'est pas exécutée, donc pas de création pour le résultat. Si vous obtenez le même résultat que moi, cela signifie qu'il est généré correctement. Que se passe-t-il lorsque vous exécutez l'une de ces commandes seul? Essayez simplement d'exécuter ncks -C -F -d nj_u, 151,152,1 ni_u, 234,235,1 -v vel_u 20091208000001.nc testU.nc
. Avez-vous reçu le même message d'erreur?
ça marche très bien quand je fais ça. J'ai bien mon testU.nc avec les données dont j'ai besoin. Merci de m'avoir aidé.
Cela n'a pas de sens. Il ne devrait y avoir aucune différence entre exécuter la commande vous-même ou laisser la boucle l'exécuter pour vous. C'est la même commande. La dernière chose que je ne peux pas vous conseiller est de définir -x
avant la boucle, de l'exécuter et de vérifier attentivement la sortie de débogage. Le comportement que vous décrivez ne peut pas être reproduit et n'a pas non plus de sens conceptuellement: - /
Je crois que les mots ni_u, 234,235,1
ont été confondus avec un autre nom de fichier. Vous auriez besoin d'un autre -d
avant cela.
Et si vous traitez plusieurs fichiers nc, vous voudrez peut-être renommer testU.nc
afin qu'ils ne se chevauchent pas , ou vous pouvez utiliser ncrcat
pour concaténer en un seul fichier. Par exemple
ncrcat -C -F -d nj_u,151,152,1 -d ni_u,234,235,1 -v vel_u 2009120800000?.nc testU.nc
Si c'était la raison (ce qui a du sens, BTW), alors l'affirmation faite dans la question que le code fonctionne correctement hors de la boucle serait fausse:
@Poshi oui, je sais, ça a bien fonctionné la veille, je n'ai pas vu que -d manquait. Leçon apprise ...
C'est la raison pour laquelle je vous demandais de réexécuter la commande et que j'écrivais la commande exacte que vous deviez tester, pour que vous puissiez simplement copier-coller et vérifier que la déclaration était vraie. BTW, ce serait bien de corriger la question pour que la réponse ait du sens.
@Packard a raison sur les deux points. De plus, la foulée de 1 est par défaut et n'est donc pas nécessaire. D'où
ncrcat -C -F -d nj_u, 151 152 -d ni_u, 234 235 -v vel_u 2009120800000 $ {x} .nc testU $ {x} .nc
J'ai modifié le code ci-dessus en fonction des dimensions que je voulais (lat, lon)
ncrcat -C -F -d nj_u,151,152,1 -d ni_u,234,235,1 -v vel_u 2009120800000?.nc testU.nc
et le commentaire était le suivant:
CONSEIL: Si l'opération échoue, essayez le multislabbing ( http://nco.sf.net/nco.html#msa ) enveloppé dimension en utilisant d'abord ncks, puis appliquez ncrcat au fichier résultant
Pour chaque itération de boucle, chacun des fichiers de 20091208000001.nc à ..3.nc est traité. Il s'agit donc essentiellement d'un fichier à la fois. Quel est le probleme avec ca
Je ne sais pas que ça devrait marcher. C'est pourquoi je l'ai posté. J'obtiens cette erreur 4 fois dans ma sortie.