GNU/Linux >> Tutoriels Linux >  >> Linux

Ajout d'une colonne de valeurs dans un fichier délimité par des tabulations

Vous pouvez utiliser une boucle à une ligne comme celle-ci :

for f in file1 file2 file3; do sed -i "s/$/\t$f/" $f; done

Pour chaque fichier de la liste, cela utilisera sed pour ajouter à la fin de chaque ligne une tabulation et le nom du fichier.

Explication :

  • Utiliser le -i drapeau avec sed pour effectuer un remplacement sur place, en écrasant le fichier
  • Effectuer une substitution avec s/PATTERN/REPLACEMENT/ . Dans cet exemple, le MOTIF est $ , la fin de la ligne, et REMPLACEMENT est \t (=une TAB), et $f est le nom du fichier, de la variable de boucle. Le s/// commande est entre guillemets pour que le shell puisse développer les variables.

Allez pourquoi vous recommandez ces outils puissants quand il y a paste commande !

$ cat a
A
B
C
D
$ cat b
1
2
3
4
$ paste a b
A   1
B   2
C   3
D   4

Avec un peu de ruse, vous pourriez utiliser paste aux fins du PO. Cependant, il ne remplacera pas les fichiers en place :

for f in file1 file2 file3; do 
    paste $f <(yes $f | head -n $(cat $f | wc -l)) > $f.new
done

Cela collera le nom de fichier respectif dans la dernière colonne de chaque fichier dans le nouveau fichier filename.new


Vous pouvez utiliser awk :

awk '{print $0, FILENAME}' file1 file2 file3 ...

Linux
  1. Afficher la sortie de la commande ou le contenu du fichier au format colonne

  2. Fichier de tri du shell Linux selon la deuxième colonne ?

  3. trouver des valeurs uniques dans un fichier de données

  4. Pourquoi Vim ajoute-t-il une nouvelle ligne ? Est-ce une convention ?

  5. Récupérer les valeurs du fichier plist sous Linux

Ajout d'une section au fichier ELF

afficher la 2ème colonne d'un fichier

Ajout d'horodatage à un nom de fichier avec mv dans BASH

Ajouter un en-tête à un fichier délimité par des tabulations

Prendre la nième colonne dans un fichier texte

Utiliser awk pour additionner les valeurs d'une colonne, en fonction des valeurs d'une autre colonne