| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
| database:utilitaires-imports [2026/08/19 16:56] – [Extraire les lignes comprenant un nombre de tabulation anormal] jpmilcent | database:utilitaires-imports [2026/08/20 11:06] (Version actuelle) – [Extraire les lignes comprenant un nombre de tabulation anormal] jpmilcent |
|---|
| # 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 ===== |
| |
| |
| ===== 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 |
| 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) ==== |
| ===== 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'' |
| </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) |
| </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> |