1
votes

ajouter des caractères tous les deux endroits dans sed

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


2 commentaires

Vos fichiers réels ont-ils ces lignes d'en-tête?


@Shawn, oui ils ont ces en-têtes


3 Réponses :


2
votes

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 >


0 commentaires

3
votes

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.


1 commentaires

la clarification des jetons est correctement dans ce cas, merci



2
votes

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.


0 commentaires