Besoin d'aide sur AWK

Résolu
th.deudon Messages postés 399 Date d'inscription   Statut Membre Dernière intervention   -  
th.deudon Messages postés 399 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, je dois faire un programme en AWK et j'ai quelques questions.

Peut on faire plusieurs FS?
Comment créer un dossier avec une valeur du texte
( exemple : dossier originel 1 2 3 4
dossier final j'ai mangé 4 pommes ( avec 4 car $4 ) )?
Comment avoir le nombre de lignes du dossier dans BEGIN?

Merci beaucoup pour vos réponses,
Si besoin de précisions sur les conditions, demandez

43 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
le format ce n'est pas le contenu, voici pour les 2 premiers fichiers, mais je n'ai pas compris le rôle du 3ème
$ cat a11 a22
A C E
A D F
B D G
.//blabla/blabla/E.xml
.//blabla/blabla/F.xml
.//blabla/blabla/G.xml 
$ awk 'ARGIND==1 {a[$3]=$0; next} {x=$0; FS="/."; $0=x; n=$(NF-1); a[n]=a[n] " " $0}  END{for(n in a)print a[n]}' a11 a22 
A C E .//blabla/blabla/E.xml
A D F .//blabla/blabla/F.xml
B D G .//blabla/blabla/G.xml 
$
0
th.deudon Messages postés 399 Date d'inscription   Statut Membre Dernière intervention   15
 
ah, ok, ben c'est des dossier .sh sur ubuntu sous la forme ci dessus


mmmh, ca m'a mis l'un sur l'autre, j'ai
.//blabla/blabla/E.xml .//blabla/blabla/f.xml .//blabla/blabla/g.xml
A C E
A D F
B D G

comme retour... :(
0
th.deudon Messages postés 399 Date d'inscription   Statut Membre Dernière intervention   15
 
je re demain, merci pour ton aide, j'ai appris quelques trucs
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
si des fichiers viennent de Windows, attention aux ^M en fin de lignes
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
th.deudon Messages postés 399 Date d'inscription   Statut Membre Dernière intervention   15
 
Salut dubcek,

il ne me semble pas qu'ils soient originaire de windows

EDIT : petit soucis, mes variables n'ont pas de valeurs hors de la boucle awk... je pense que ca marchait avant en gros si j'ai un print dans awk' ', ca marche, sinon j'ai rien
0
th.deudon Messages postés 399 Date d'inscription   Statut Membre Dernière intervention   15
 
Sinon, comment faire un print de l'ensemble en gardant les lignes vides?
Et associer une variable a tout ce que contient un fichier? pas forcement en awk.

Désolé pour toutes ces questions mais j'ai rien trouvé sur internet de concret/ expliqué, du coup j'espere faire un topic claire pour ceux qui nous lirons



Pour ceux qui se demande comment faire pour la variable :
variable=$(awk '.........' fichier )
Ca donne a la variable ce qu'affiche awk, donc faut du print, pas d'espace avant et apres le =
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
un print de quel ensemble ?
un fichier dans une variable en bash:
var=$(<fichier); echo "$var"
0
th.deudon Messages postés 399 Date d'inscription   Statut Membre Dernière intervention   15
 
en fait c'est l'ensemble des lignes du fichier ( les lignes vides comprises )

je me suis fait recaler ^^ permission denied
sinon quand je fais
variable=$(awk '.........' fichier ) , le fichier etant un fichier du type "fichier 3", il me dit,
.//blibli/blibli/EF.xml. No such file or directory

En gros mon truc marche mais pas quand c'est des liens de fichiers j'ai l'impression

Miracle, ca marche je ne sais comment, sans rien avoir toucher, je confirme que variable=$(awk ' { print $0 } fichier ) marche
0
th.deudon Messages postés 399 Date d'inscription   Statut Membre Dernière intervention   15
 
Donc en gros j'ai reussi a faire 5 variables ( une pour chaque colonne ) , j'aimerai faire un dossier qui contient ces 5 variables ( donc sur 5 colonnes )
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
écrire ces 5 variables dans un fichier en 5 colonnes?
plutot que des variables multiples, on peut utiliser un tableau
0
th.deudon Messages postés 399 Date d'inscription   Statut Membre Dernière intervention   15
 
moi je te suis ^^

Mais avoir un fichier comme demandé, ca serait le mieux ( plus facile pour la suite )
j'ai 5 variable ( en colonne ) et je voudrais les concaténer pour en faire 5 colonnes
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
$ echo "$aa"
1
2
3
4
$ echo "$ab"
a
b
c
d
$ echo "$ac"
A
B
C
D
$ paste -d ' ' <(echo "$aa") <(echo "$ab") <(echo "$ac")
1 a A
2 b B
3 c C
4 d D
$ 
0
th.deudon Messages postés 399 Date d'inscription   Statut Membre Dernière intervention   15
 
C'est parfait, merci,( pour le mettre dans un dossier faire > dossier )

Bon, deja je sais faire ca, merci beaucoup, maintenant, sais tu comment je pourrais faire :

recuperrer des données contenue dans un dossier dont le parcours est le terme A,B,C,D et les remplacer par A,B,C,D, je sais ou elle se trouve dans les dossier ( toujours au memes endroit ) , si t'as besoin de l'endroit, je suis a ta disposition, en tout cas merci, dommage que ce soit des coms sinon je t'aurais mis des +1 ;)


deplus je veux faire
il y a " temps de ligne " en begin, du coup j'ai fait
BEGIN {
{print" il y a"} {while(getline); print NR}
}
ca marche mais mon chiffre est a la ligne du dessous
et ca empeche les actions de ligne de se faire...
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
j'ai pas compris : recuperrer des données ........... A,B,C,D et les remplacer par A,B,C,D,

dossier veut dire fichier ou répertoire ?

le while(getline) est pourtant correct:
$ seq 1 10 > a3
$ wc -l a3
10 a3
$ awk 'BEGIN{while(getline); print NR}' a3
10
$
que répond wc -l fichier ?
0
th.deudon Messages postés 399 Date d'inscription   Statut Membre Dernière intervention   15
 
en fait j'ai plus besoin du while get line, j'ai fait un dossier comprennant le nombre de ligne uniquement, j'ai fait un dossier grace a cette information, et je concatene avec les informations contenues dans des lignes

alors, en gros A = .//blabla/blabla/E.xml
dans .//blabla/blabla/E.xml j'ai par exemple :
<bla>
<bli>
<blo>
<Blu>X</Blu>
<bly>Y</bly>
<ble>Z</ble>
</blo>
</bli>
</bla>

et je veux que dans mon dossier au lieu de A j'ai X Y Z
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
remplacer X Y Z dans ces balises?
<Blu>X</Blu>
<bly>Y</bly>
<ble>Z</ble>
0
th.deudon Messages postés 399 Date d'inscription   Statut Membre Dernière intervention   15
 
non, prendre ces données, et les mettre dans le fichier fait par les contenance a ligne de leur chemin ^^


en gros j'avais comme idée :
faire une boucle de variable, qui pour chaque ligne du fichier d'origine contenant les lien ( fichier 2 )
la ligne 1 serait egale a var1 ... etc
et apres je fait une variable de procedure awk qui va retirer les valeurs voulues dans une variable var11 disons, puis var22 ... et enfin concatener avec une boucle ( car je ne sais pas combien il y en a )

je vais le faire comme ca
action=$(awk ' BEGIN{"mes FS"} {print$2} ' PARAM_VAR) j'ai trouvé ca dans internet, mais comment l'utiliser?
en faisant action$1 par exemple? sinon, que mettre a la place de PARAM_VAR?
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
il faut utiliser un tableau
$ var[0]=3615; var[1]="hahaha" ; var[2]=3.14 ; var[3]="xxx"
$ i=2 ; echo ${var[$i]}
3.14
$ echo ${#var[@]} # taille du tableau
4
$ echo ${var[@]}  # contenu du tableau
3615 hahaha 3.14 xxx
0
th.deudon Messages postés 399 Date d'inscription   Statut Membre Dernière intervention   15
 
j'ai le message suivant : cannot open PARAM_VAR,
illegal reference to variable action
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
si PARAM_VAR est une variable:
action=$(awk ' BEGIN{"mes FS"} {print$2} ' <<<"$PARAM_VAR") 
0