Je travaille avec des fichiers csv, ce sont des catalogues sismiques à partir d'une base de données, je dois les organiser au format USGS afin de commencer une autre étape.
Mon format de données d'entrée est:
sed 's/.\{13\}/&: /g' temp3.dat > temp4.dat
3 Réponses :
Vous pouvez faire:
perl -p -i -e "s/^(\d{4}),(\d+),(\d+),(\d{2})(\d{2})(\d{2}),([0-9.-]+),([0-9.-]+),(.*)$/\1-\2-\3T\4:\5:\6,\7,\8,\9/g" initialfile.csv
ou pour une modification en ligne:
cat initialfile.csv|perl -p -e "s/^(\d{4}),(\d+),(\d+),(\d{2})(\d{2})(\d{2}),([0-9.-]+),([0-9.-]+),(.*)$/\1-\2-\3T\4:\5:\6,\7,\8,\9/g"
qui devrait afficher le format USGS
p >
Une façon d'utiliser GNU sed:
sed -r 's/([0-9]{4}),([0-9]{1,2}),([0-9]{1,2}),([0-9]{2})([0-9]{2})([0-9]{2})(,.*)/\1-\2-\3T\4:\5:\6\7/' file
Vous divisez le fichier en jetons individuels, ce qui signifie la colonne comme jeton un, la deuxième colonne comme jeton 2, et quand il s'agit de la 4e colonne, prenez 2 nombres comme jeton, puis remplacez-les si nécessaire.
la clarification des jetons est correctement dans ce cas, merci
Cela pourrait fonctionner pour vous (GNU sed):
sed -E '1!s/^([^,]*),([^,]*),([^,]*),(..)(..)/\1-\2-\3T\4:\5:/' file
Oubliez l'en-tête.
Remplacez les premier et deuxième délimiteurs de champs (tous les champs sont délimités par un virgule ,
) avec un tiret -
.
Remplacez le troisième séparateur de champs par T
.
Divisez le quatrième champ en trois parties égales et séparez chaque partie par deux points :
.
NB La dernière partie du quatrième champ restera telle quelle et n'a donc pas besoin d'être définie.
Parfois, en tant que programmeurs, nous devenons trop concentrés sur les données et serions mieux servis en considérant le problème en tant qu'artiste et coder ce que nous voyons.
Vos fichiers réels ont-ils ces lignes d'en-tête?
@Shawn, oui ils ont ces en-têtes