database:utilitaires-imports

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
database:utilitaires-imports [2024/09/04 16:13] – [Extraction de lignes d'un fichier] jpmilcentdatabase:utilitaires-imports [2026/08/20 11:06] (Version actuelle) – [Extraire les lignes comprenant un nombre de tabulation anormal] jpmilcent
Ligne 62: Ligne 62:
 Il est possible de repérer les lignes posant problème avec la succession Il est possible de repérer les lignes posant problème avec la succession
 de commandes suivantes : de commandes suivantes :
 +
 +Si votre espace de stockage principal n'est pas un SSD NVME mais que vous en posséder un sur la machine, l'utilitaire ''sort'' peut s'en servir en indiquant un dossier sur ce disque à l'aide de l'option ''-T'', par exemple : ''-T /data-nvme/jpmilcent/tmp/''.
  
 <code bash> <code bash>
 # Afficher le nombre de tabulation des lignes du fichier contenant un extrait de la synthese # Afficher le nombre de tabulation des lignes du fichier contenant un extrait de la synthese
 # Le chemin /data-nvme/jpmilcent/tmp/ correspond à un dossier temporaire sur un disque rapide SSD NVM-E # Le chemin /data-nvme/jpmilcent/tmp/ correspond à un dossier temporaire sur un disque rapide SSD NVM-E
-grep -n -o -P "\t" synthese.extract.csv | sort -n -T /data-nvme/jpmilcent/tmp/ | uniq -c | cut -d : -f 1+grep -n -o -P "\t" synthese.extract.csv | sort -n  | uniq -c | cut -d : -f 1
  
 # Extraire le nombre de tabulation anormal (**ici différent de 58**) et le numéro de la ligne correspondante : # Extraire le nombre de tabulation anormal (**ici différent de 58**) et le numéro de la ligne correspondante :
 # Le chemin /data-nvme/jpmilcent/tmp/ correspond à un dossier temporaire sur un disque rapide SSD NVM-E # Le chemin /data-nvme/jpmilcent/tmp/ correspond à un dossier temporaire sur un disque rapide SSD NVM-E
-grep -n -o -P "\t" synthese.csv | sort -n -T /data-nvme/jpmilcent/tmp/ | uniq -c | cut -d : -f 1 | grep -P -v "^\s+58 " > ./synthese.tab_errors.txt+grep -n -o -P "\t" synthese.csv | sort -n | uniq -c | cut -d : -f 1 | grep -P -v "^\s+58 " > ./synthese.tab_errors.txt
  
 # Supprimer le nombre de tabulation (occupant les 8 premières caractères de chaque ligne) # Supprimer le nombre de tabulation (occupant les 8 premières caractères de chaque ligne)
Ligne 85: Ligne 87:
 # Après correction, vous pouvez vérifier si le fichier corrigé ne contient plus de ligne en erreur # Après correction, vous pouvez vérifier si le fichier corrigé ne contient plus de ligne en erreur
 # Le chemin /data-nvme/tmp/ correspond à un dossier temporaire sur un disque rapide SSD NVM-E # Le chemin /data-nvme/tmp/ correspond à un dossier temporaire sur un disque rapide SSD NVM-E
-grep -n -o -P "\t" synthese.csv | sort -n -T /data-nvme/tmp/ | uniq -c | cut -d : -f 1 | grep -P '^(?    58 )'+grep -n -o -P "\t" synthese.csv | sort -n | uniq -c | cut -d : -f 1 | grep -P '^(?    58 )'
 # Si tout est OK, la commande ne doit rien afficher... # Si tout est OK, la commande ne doit rien afficher...
 </code> </code>
 +
 +===== Extraire lignes avec trop de caractères dans une colonne =====
 +
 +<code bash>
 +# Extraire les lignes dont la colonne 38 possède plus de 500 caractères :
 +awk -F'\t' -v col=38 -v limite=500 'length($col) > limite { print "Ligne " NR " : " length($col) " caractères" }' synthese.csv > synthese.col-38-extra-chars.txt
 +</code>
 +  * ''%%-v col=38%%'' : remplacez 38 par le numéro de la colonne que vous souhaitez analyser.
 +  * ''%%-v limite=500%%'' : remplacez 500 par le nombre de caractères au-delà duquel vous souhaitez être alerté.
 +  * ''%%length($col) > limite%%'' : c'est la condition. awk ne déclenchera la suite que si la longueur du texte dans la cellule est strictement supérieure à votre limite.
 +  * ''%%{ print NR }%%'' : permet d'afficher uniquement le numéro de la ligne concernée. Dans l'exemple, nous affichons également le nombre de caractères ''%%length($col)%%''
  
 ===== Trouver les doublons ===== ===== Trouver les doublons =====
Ligne 121: Ligne 134:
  
  
-===== Affichage/Extraction de lignes contenant une chaine particulière =====+===== Affichage/Extraction de lignes contenant une chaîne particulière =====
  
 Par exemple, pour extraire les lignes du fichier ''synthese.csv'' contenant  Par exemple, pour extraire les lignes du fichier ''synthese.csv'' contenant 
Ligne 128: Ligne 141:
 utiliser les commandes suivantes : utiliser les commandes suivantes :
 <code bash> <code bash>
 +# Extraction de la ligne des entêtes de colonne :
 head -1 synthese.csv > synthese.problems.csv head -1 synthese.csv > synthese.problems.csv
 +# Recherche via RegExp :
 grep -P ' Stéphane\t\tpointage' synthese.csv >> synthese.problems.csv grep -P ' Stéphane\t\tpointage' synthese.csv >> synthese.problems.csv
 +# Recherche d'un texte 100% littéral (pas de regexp) :
 +grep -F " - Téléphérique de l'Aiguille du Midi. Gare intermédiaire.  Abords de la gare. \nLa zone parcouru" synthese.csv >> synthese.problems.csv
 </code> </code>
 +
 +===== Affichage/Extraction des numéros de ligne contenant une chaîne particulière =====
 +<code bash>
 +# Recherche via RegExp :
 +grep -nP ' Stéphane\t\tpointage' synthese.csv | cut -d: -f1
 +# Recherche d'un texte 100% littéral (pas de regexp) :
 +grep -nF " - Téléphérique de l'Aiguille du Midi. Gare intermédiaire.  Abords de la gare. \nLa zone parcouru" synthese.csv | cut -d: -f1
 +</code>
 +  * ''-n'' (//Line number//) : Demande à grep d'afficher le numéro de la ligne avant le texte (ex: 45231: - Téléphérique...).
 +  * ''%% | cut -d: -f1 %%'' : permet de garder seulement le numéro de ligne.
 +  * Pour rediriger vers un fichier ajouter à la fin ''%%> synthese.pattern-lines.txt%%''
  
 ==== Commandes d'extractions (TSV) ==== ==== Commandes d'extractions (TSV) ====
Ligne 158: Ligne 186:
 ===== Remplacer le contenu d'une colonne ===== ===== Remplacer le contenu d'une colonne =====
 Remplacer le contenu de la 33ème colonne dans le fichier //synthese.csv// quand elle contient ''\N'' avec la commande : <code bash> sed -i -E 's#^(([^\t]*\t){32})\\N\t#\1\t#' synthese.csv </code> Remplacer le contenu de la 33ème colonne dans le fichier //synthese.csv// quand elle contient ''\N'' avec la commande : <code bash> sed -i -E 's#^(([^\t]*\t){32})\\N\t#\1\t#' synthese.csv </code>
-===== Remplacement de chaine =====+===== Remplacement de chaîne =====
  
-Pour remplacer une chaine dans un fichier texte donnée, il est possible d'utiliser+=== Remplacement de chaîne courte === 
 +Pour remplacer une chaîne dans un fichier texte donnée, il est possible d'utiliser
 ''sed'' avec l'option ''-i''. ''sed'' avec l'option ''-i''.
 Par exemple, pour remplacer '' Stéphane\t\tpointage'' par '' Stéphane\tpointage'' Par exemple, pour remplacer '' Stéphane\t\tpointage'' par '' Stéphane\tpointage''
Ligne 168: Ligne 197:
 </code> </code>
  
-Remplacement multi-lignes (option ''-z'' de //sed//) :+=== Remplacement de chaîne longue === 
 +Remplacement de grande chaîne de texte avec Perl : 
 +<code bash> 
 +# Texte actuel 
 +export OLD="La zone parcourue se situe dans le secteur de contact du granite du Mont-Blanc et des gneiss du sous-bassement du massif, d'où la présence sur le socle de gneiss de nombreux blocs de granite venus des sommets, épars ou sous forme de moraines. Le glacier des Pèlerins, recouvert de blocs dans sa partie aval, est relativement statique et ne marque pas à l'heure actuelle un \"\"recul\"\" caractéristique, en comparaison avec d'autres glaciers proches. 
 +# Nouveau texte 
 +export NEW="Au contact du granite du Mont-Blanc et du socle de gneiss, la zone est jonchée de blocs granitiques venus des sommets (épars ou en moraines). Couvert de blocs en aval, le glacier des Pèlerins reste relativement statique : contrairement aux glaciers voisins, il ne marque actuellement aucun recul caractéristique." 
 +# Remplacement 
 +mv synthese.csv synthese.save.csv && perl -pe 's/\Q$ENV{OLD}\E/$ENV{NEW}/g' synthese.save.csv > synthese.csv 
 +</code> 
 +  * ''\Q'' et ''\E'' (//Quotemeta//) : ordonne à Perl de traiter tout le texte comme du texte littéral. 
 +  * Très rapide car Perl lit une ligne, la modifie si besoin, et l'écrit immédiatement dans le nouveau fichier. 
 + 
 +=== Remplacement multi-lignes === 
 +Remplacement multi-lignes avec Sed (option ''-z'' de //sed//) :
 <code bash> <code bash>
 # Remplacement des retours charriot (CR) suivi de retour à la ligne (LF) (si erreur INT_MAX, voir ci-dessous) # Remplacement des retours charriot (CR) suivi de retour à la ligne (LF) (si erreur INT_MAX, voir ci-dessous)
Ligne 176: Ligne 219:
 </code> </code>
  
 +Remplacement multi-lignes avec Awk (rassembler 2 lignes successives) :
 +<code bash> 
 +# Exemple de texte de fin de ligne : anticlinal\n
 +awk '/anticlinal\\n$/ { printf "%s", $0; next } { print }' synthese.save.csv > synthese.csv
 +</code>
 +  * Ici la fin de ligne se termine par les caractères littérals ''\n''. Il faut protéger "\".
 +  * ''printf "%s", $0'' affiche la ligne courante contenant le pattern sans le caractère de fin de ligne et passe à la ligne suivante ''next''.
 +  * Si la ligne ne contient pas le pattern, elle est renvoyée tel quel.
 ===== Stats ===== ===== Stats =====
   * Date d'observation la plus ancienne : <code bash> csvstat -t -q '"' -u 0 -e "UTF-8" -c date_min --min synthese.csv </code>   * Date d'observation la plus ancienne : <code bash> csvstat -t -q '"' -u 0 -e "UTF-8" -c date_min --min synthese.csv </code>
  • database/utilitaires-imports.1725466415.txt.gz
  • Dernière modification : 2024/09/04 16:13
  • de jpmilcent