web-dev-qa-db-fra.com

Comment ajouter une chaîne à une colonne spécifique dans un fichier qui n'est pas un espace blanc

Comment ajouter une chaîne à une colonne spécifique dans un fichier qui n'est pas un espace blanc.

cat fichier.txt

abc
defg
xy

Maintenant, je veux ajouter la chaîne "test" dans la colonne 8 du fichier.txt. Mais la colonne 8 n'est pas un espace blanc, comment puis-je ajouter une chaîne?

CA devrait etre -

abc    test
defg   test
xy     test

Merci

--- Vishal

1
Vishal Patel

Il semble que vous souhaitiez imprimer le premier champ justifié à gauche dans une largeur de champ de 8:

$ awk -v s=test '{printf "%-8s%s\n", $1, s}' file.txt
abc     test
defg    test
xy      test
2
steeldriver

Solution assez rapide et sale en utilisant paste, yes et head:

paste file.txt <(yes test | head -n 3)
  • yes imprime des lignes sans fin de test
  • head obtient uniquement les trois premières lignes de yes
  • <(...) redirige la sortie de ... dans paste en tant que fichier d'entrée
  • paste joint les deux fichiers d'entrée
1
wjandrea

L'utilisation de la commande sed devrait aider avec ceci:

sed -E 's/([[:alpha:]]*)/\1 \ttest/g' data.txt

Soit exécuter:

  1. Et créé une sauvegarde:

    sed -i.bak -E 's/([[:alpha:]]*)/\1 \ttest/g' data.txt
    
  2. Rediriger dans un autre fichier:

    sed -E 's/([[:alpha:]]*)/\1 \ttest/g' data.txt > result.txt
    

Résultats:

abc     test
defg    test
xy      test

Info:

  • ([[:alpha:]]): capturer les alphabets
  • \1 \ttest: renvoie le groupe capturé et ajoute une tab et le mot test
  • -E: Option regex étendue pour la portabilité.
1
George Udosen