Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.
nombre réponses : 25

#0 Re : -1 »  awk comment faire plus court » Le 31/05/2014, à 14:21

aduxas
Réponses : 5
fu=$(awk -F "/" '{print $3}' "$fic")

essaye <<<$fic pour forcer l'expansion

#1 -1 »  [RESOLU] concatenation dans awk » Le 29/05/2014, à 18:11

aduxas
Réponses : 3

J'ai groupé un nombre de pattern dont j'ai besoin dans un script awk dans un tableau (N est une constante de l'ordre de plusieurs dizaines):

BEGIN{ s[1] = "string 1"; s[2] = "string 2"; ...; s[N] = "string N"}

$0~s[1] {<action 1>}
$0~s[2] {<action 2>}
...
$0~s[N] {<action N>}

END{ for( i=1; i<= N; i++ ) printf "<format>" s[i], ... }

- Est-ce que les pattern avec $0~ semblent bon, ou y a-t-il mieux?

- Mon script au départ utilisait des pattern explicits,  /^string 1/, etc., mais comme je réutilise les chaines, je préfère utiliser un tableau.  Cela me permet de faire des boucles, par exemple.  Malheureusement, j'ai un conflit, car l'omission du caret dans les chaines du tableau en rend deux non-uniques (l'un devient une sous-chaine de l'autre).  Je ne veux pas inclure le caret car il apparaitrait dans l'impression à la fin.  Est-ce qu'il y a moyen de changer le pattern $0~s[k] pour concatener le caret?  Je n'ai pas trouvé comment faire.  Si rien ne marche, je peux le filtrer dans les impressions, mais cela semble lourd.

#2 Re : -1 »  [RESOLU] concatenation dans awk » Le 29/05/2014, à 20:13

aduxas
Réponses : 3

En effet.  Merci!

#3 Re : -1 »  utilisation de awk ou n'importe quel filtre » Le 09/04/2014, à 21:13

aduxas
Réponses : 9

S'il le faut absolument,

awk 'n!=3{n++;a[n]=$1} n==3{print a[1],a[2],a[3];n=0}' fichier

#4 Re : -1 »  [Resolu] gdb -tui "No source available" » Le 08/04/2014, à 01:14

aduxas
Réponses : 9

Est-ce possible que le binaire n'ait pas été compilé avec l'option debug (-g)?

#5 Re : -1 »  [Resolu] gdb -tui "No source available" » Le 09/04/2014, à 21:01

aduxas
Réponses : 9
mhaz a écrit :

en revanche,

gcc -g fichier.c
gdb -tui ./a.out

ne corrige pas le problème...

La raison est que gcc -g compile, mais ne fait pas d'édition de liens.  Tu avais donc exécuté le vieux binaire.  C'est bien -g qui fait la différence.

#6 Re : -1 »  [RESOLU] Insertion d'un caractère dans un fichier avec awk. » Le 03/04/2014, à 22:40

aduxas
Réponses : 5
genma a écrit :

$0:CB34
$1:154
$2:COL2

Non, $0 c'est toute la ligne.  La numérotation des champs commence par 1.

#7 Re : -1 »  supprimer les blancs dans tous les noms de fichiers d'un répertoire » Le 24/03/2014, à 02:13

aduxas
Réponses : 15

Les deux me semblent un peu lourd (car boucle, sous-shells).  Quid de

rename 's/ /_/g' *

#8 Re : -1 »  supprimer les blancs dans tous les noms de fichiers d'un répertoire » Le 25/03/2014, à 03:14

aduxas
Réponses : 15
cristobal78 a écrit :

Y a t il un moyen de descendre dans les sous-répertoires un peu comme on peut le faire avec  -r ou -R dans certaines commandes ?

Je ne crois pas..  Une méthode:

find . -exec rename 's/ /_/g' {} \;

EDIT:  utiliser "find -type f" si tu ne veux pas renommer les dossiers.

#9 Re : -1 »  diff » Le 18/03/2014, à 04:30

aduxas
Réponses : 3

Ben oui,

man diff a écrit :

       -q  --brief
              Output only whether files differ.

Essaye de remplace l'option -q par -s ?

#10 Re : -1 »  diff » Le 19/03/2014, à 03:52

aduxas
Réponses : 3

Je crois que ce que tu vois veut simplement dire que d1 et d2 n'ont rien en commun.  Après tout, diff est une commande pour montrer ce qui est différent.  J'ai modifié ton arborescence un peu:

$ find
.
./d1
./d1/z
./d1/z/txt.txt
./d1/j
./d1/j/zjl.txt
./d1/l
./d1/l/cd
./d2
./d2/z
./d2/z/txt.txt

Donc, d2/l2/hello.txt devient d2/z/txt.txt

$ diff -aqr d1 d2
Only in d1: j
Only in d1: l
$ diff -asr d1 d2
Files d1/z/txt.txt and d2/z/txt.txt are identical

#11 Re : -1 »  extraction entre 2 mots avec sed ou grep ? » Le 18/03/2014, à 04:26

aduxas
Réponses : 3
sed -nr 's/.*`ids` = \\(.*)\\.*/\1/p' fichier.txt

ou avec regexp standard

sed -n 's/.*`ids` = \\\(.*\)\\.*/\1/p' fichier.txt

ou en deux substitutions

sed -n 's/.*`ids` = \\//;s/\\.*//p' fichier.txt

#12 Re : -1 »  environment variable LOGIN is empty » Le 04/03/2014, à 01:56

aduxas
Réponses : 2

user=monutilisateur hostdns

Cela ne me semble pas correct.  Je suppose que hostdns y est de trop?
J'essayerais rajouter ceci:

LOGIN=${user}

La variable LOGIN n'est pas défini sous Ubuntu, mais existe sous plein d'autres Linux.

#13 Re : -1 »  Utilisation de "diff" » Le 14/02/2014, à 18:49

aduxas
Réponses : 11
diff -B 3 fic1 fic2

réduit le volume de sorties (n'imprime que les lignes qui précedent)

#14 Re : -1 »  Utilisation de "diff" » Le 15/02/2014, à 01:27

aduxas
Réponses : 11

ah zut, en effet....  Merci.

#15 Re : -1 »  [Résolu] Transformer ligne en colonne avec awk ? » Le 18/01/2014, à 00:24

aduxas
Réponses : 21

Ca depend ce que veut dire "champs"  Si ce sont des caractères, avec sed:

sed '/^.\{52\}$/d' fichier

Si ce sont des champs dans le sens awk

awk 'NF!=13' fichier

#16 Re : -1 »  [RESOLU] Utiliser une regexp dans ls » Le 16/01/2014, à 02:33

aduxas
Réponses : 6

Sans activer extglob:

ls *{mp3,ogg}

#17 Re : -1 »  [RESOLU] Utiliser une regexp dans ls » Le 17/01/2014, à 05:33

aduxas
Réponses : 6

Oui, dans regexp * veut dire "n'importe combien d'instances du caractère précédent".  Dans bash, pour une commande qui prend comme argument une liste de fichiers, * est un joker et peut représenter tout nom ou partie de nom de fichier.
Les accolades enferment une liste de noms partiels, chacun à combiner avec le reste du pattern.  La liste peut inclure un élément nul, p.e.

diff fichier{,.bak}

est équivalent à

diff fichier fichier.bak

et

ls *{mp3,ogg}

à

ls *mp3 *ogg

Ce ne sont pas des regexp.

#18 Re : -1 »  [bash] impossible de supprimer un fichier » Le 07/01/2014, à 02:07

aduxas
Réponses : 7

Il y a forcément un problème avec ce fichier.  La commande

file backblue.gif

sert à voir quel est le type de fichier, mais je pense que t'en tireras pas grand-chose  As-tu essayé

touch backblue.gif

avant de le supprimer?

#19 Re : -1 »  [Résolu] Vi passage du bloc visuel à l'insertion » Le 30/12/2013, à 23:57

aduxas
Réponses : 4

Ca marche bien pour moi.  Cependant, comme je suis sous linux, je fais ctrl-V pour passer en bloc visuel.  Le deuxième # apparait avec un certain délai, après avoir quitté le mode visuel avec ESC.

#20 Re : -1 »  Extraction d'un champs spécifique id3v1.1 d'un mp3 » Le 01/12/2013, à 18:27

aduxas
Réponses : 3

Avec awk:

id3info 01.\ Medwyn\ Goodall\ -\ Ghosts\ of\ the\ Fallen.mp3 | awk -F': ' '/TPE1/{print $2}'

#21 Re : -1 »  sed et références arrières » Le 19/11/2013, à 00:05

aduxas
Réponses : 13

Attention, \[ veut dire le caractère "crochet ouvrant" tandis que [ ouvre une liste de caractères individuels.  Donc
![.]*  veut dire : un point d'exclamation suivi d'un nombre quelconque de points;
!.* veut dire : un point d'exclamation suivi d'un nombre quelconque de caractères quelconques;
!\.* est égal à ![.]*;
![^!]* veut dire un point d'exclamation suivi d'un nombre quelconque de caractères quelconques SAUF un point d'exclamation.

On voit souvent dans des scripts sed "séparateur ouvrant - suivi de tout sauf séparateur fermant - suivi de séparateur fermant" pour isoler des entités délimitées.

#22 Re : -1 »  Vim: la touche i ne permet plus de passer en insertion » Le 30/08/2013, à 17:12

aduxas
Réponses : 8

As-tu réassigné la touche?

:map i

Est-ce que I (majuscule i) marche?

#23 Re : -1 »  Commande nohup [RESOLU] » Le 28/08/2013, à 03:17

aduxas
Réponses : 4

Ces trois commandes appartiennent à la shell qui à lançé les processus auquels elles s'appliquent et ne peuvent être controlées par celle-là.

#24 Re : -1 »  utilisation dans un script de "grep" et "awk" pour imprimer dans un fi » Le 21/08/2013, à 01:55

aduxas
Réponses : 2

Tu fais le tout avec awk:

foreach filename (*_conv) mri_segstats --subject ${filename} --etiv-only | awk '/subject/{sujet=$4} /atlas_icv/{print sujet,$4}' >> fichier.txt end

Note la redirection avec >>  ce qui veut dire qu'il faut effacer le fichier avant de faire un nouvel essai, sinon ça continue à s'accumuler.