J’ai un fichier avec des données stockées dans ce format
ID;Name;Surname;Country
Et je dois pouvoir trouver et remplacer une donnée spécifique en connaissant simplement l’ID et la position des données en utilisant ‘;’ en tant que délimiteurs.
Un peu comme le résultat de
grep -n “ID” [fichier] | cut -d “;” -f [position]
- Comment remplacer un tuyau délimité dans un espace blanc dans une plage de colonnes spécifique?
- Unix: filtrez et manipulez les données de colonne dans un fichier CSV
- AWK trouve si la ligne est nouvelle ligne ou #
- sélectionner une valeur spécifique avec awk (en utilisant un tableau)
- Comment concaténer les colonnes correspondantes de plusieurs fichiers en un seul fichier, en utilisant une colonne spécifiée comme ID?
Mais remplacer par une chaîne utilisateur au lieu d’afficher
Je pense que je dois utiliser sed mais rien de ce que j’ai trouvé n’a fonctionné.
Edit: l’utilisateur viendrait d’un menu où il choisirait quoi modifier et fournir l’ID, il serait alors invité à saisir la chaîne de remplacement et à connaître la structure des données stockées (ID / Nom / Nom / Pays) chaîne serait remplacé en conséquence dans le fichier texte.
avec awk:
echo 'ID;Data1;Data2;Data3' | awk -v id="ID" -v col=3 -v repl="foo" -F';' 'BEGIN{OFS=";";} $1==id {$col=repl;}1'
Sortie:
ID; Data1; foo; Data3