Selection d'une colonne en bash
jujitsu
-
dubcek Messages postés 19021 Statut Contributeur -
dubcek Messages postés 19021 Statut Contributeur -
Bonjour,
j 'ai un fichier Identite.txt de la forme :
Identite.Nom Identite.Prenom Identite.Age
Redford Robert 56
Eastwood Cleant 80
Deep Johhny 42
Et j'aimerais en lancant la commande cat Identite.txt | script.sh Identite.Nom Identite.Age
qu'il m'affiche les deux colonnes Identite.Nom Identite.Age
Comment puis je faire cela ?
Merci d'avance
j 'ai un fichier Identite.txt de la forme :
Identite.Nom Identite.Prenom Identite.Age
Redford Robert 56
Eastwood Cleant 80
Deep Johhny 42
Et j'aimerais en lancant la commande cat Identite.txt | script.sh Identite.Nom Identite.Age
qu'il m'affiche les deux colonnes Identite.Nom Identite.Age
Comment puis je faire cela ?
Merci d'avance
A voir également:
- Selection d'une colonne en bash
- Déplacer une colonne excel - Guide
- Trier une colonne excel - Guide
- Colonne word - Guide
- Formule somme excel colonne - Guide
- Figer une colonne excel - Guide
2 réponses
hello
$ cat a3
Identite.Nom Identite.Prenom Identite.Age
Redford Robert 56
Eastwood Cleant 80
Deep Johhny 42
$
$ cat f9
#!/bin/bash
awk 'NR==1{nfy=split(arg,y);nfx=split($0,x);for(i=1;i<=nfx;i++){xx[x[i]]=i};next};{for(n=1;n<=nfy;n++)printf("%s ", $(xx[y[n]]));print ""}' arg="$*"
$
$ cat a3 | ./f9 Identite.Nom Identite.Age
Redford 56
Eastwood 80
Deep 42
$
$ cat a3 | ./f9 Identite.Nom Identite.Age Identite.Prenom
Redford 56 Robert
Eastwood 80 Cleant
Deep 42 Johhny
$
$ cat a3 | ./f9 Identite.Age
56
80
42
$
zalex06
Messages postés
3
Statut
Membre
As tu recu mon message privée (jujistsu)
problèmes : le nombre de colonnes à afficher est variable et awk a besoin du No de la colonne
NR==1 : on ne traite que la ligne 1
nfy=split(arg,y) : on stocke chaque argument ($*) dans un tableau y, nfy est leur nombre
nfx=split($0,x) : on stocke chaque nom de colonne dans un tableau x, nfx est leur nombre
for(i=1;i<=nfx;i++){xx[x[i]]=i} : on stocke dans un tableau xx le No de chaque colonne en utilisant son nom, qui est dans x, comme index, on a donc xx[nom de la colonne]=No de la colonne
next : on lit la suite
ensuite pour chaque ligne:
for(n=1;n<=nfy;n++)printf("%s ", $(xx[y[n]])) : on imprime chaque colonne par son numéro, contenu dans xx, dont le nom est dans y : $(xx[nom de la colonne]
print "" : et un saut de ligne à chaque fin de ligne
NR==1 : on ne traite que la ligne 1
nfy=split(arg,y) : on stocke chaque argument ($*) dans un tableau y, nfy est leur nombre
nfx=split($0,x) : on stocke chaque nom de colonne dans un tableau x, nfx est leur nombre
for(i=1;i<=nfx;i++){xx[x[i]]=i} : on stocke dans un tableau xx le No de chaque colonne en utilisant son nom, qui est dans x, comme index, on a donc xx[nom de la colonne]=No de la colonne
next : on lit la suite
ensuite pour chaque ligne:
for(n=1;n<=nfy;n++)printf("%s ", $(xx[y[n]])) : on imprime chaque colonne par son numéro, contenu dans xx, dont le nom est dans y : $(xx[nom de la colonne]
print "" : et un saut de ligne à chaque fin de ligne