#1 Le 13/04/2020, à 12:43
- Compte supprimé
[Résolu] Awk variable avec parenthèses
Bonjour les ami(e)s
Petit problème avec awk.
Voici un exemple qui fonctionne:
file="/home/user/fichier 1.txt"
awk -v var="$file" '{
if ($0 ~ var) {printf "%s\n" ,var}
else {printf "Echec\n"}
}' <<< "$file"
Et voici le même sauf qu'il ne fonctionne pas (il devrait me retourner /home/user/fichier (1).txt) :
file="/home/user/fichier (1).txt"
awk -v var="$file" '{
if ($0 ~ var) {printf "%s\n" ,var}
else {printf "Echec\n"}
}' <<< "$file"
D'après ce que j'ai compris le problème vient de cette partie du code ($0 ~ var) et des parenthèses contenu dans var.
Merci du coup de pouce.
Slyfox
Dernière modification par Compte supprimé (Le 14/04/2020, à 09:23)
#2 Le 13/04/2020, à 13:02
- noje
Re : [Résolu] Awk variable avec parenthèses
C'est bizarre tu as les mêmes variables, après le fichier à des parenthèses dans son nom "()"
Est-ce que par hasard il ne prendrait pas les parenthèses pour une annonce de variable, c'est une piste, mais :
Tente de renommer le fichier en enlevant les parenthèses (1) si c'est le cas sans parenthèse et redit ce qui se passe.
Dernière modification par noje (Le 13/04/2020, à 13:04)
- LTS 18.04 & 22.04 - jwm - cwm - zsh
Les seules vraies erreurs sont celles que nous commettons à répétition.
Les autres sont des occasions d'apprentissage. (Dalaï Lama)
Hors ligne
#3 Le 13/04/2020, à 13:27
- pingouinux
Re : [Résolu] Awk variable avec parenthèses
Bonjour,
(r) Grouping: matches r.
Ce n'est pas joli, mais on peut s'en sortir ainsi, en entourant chaque parenthèse avec des [ ] :
file="/home/user/fichier (1).txt"
awk -v var="$(sed 's/[()]/[&]/g' <<<"$file")" '{
if ($0 ~ var) {printf "%s\n" ,$0}
else {printf "Echec\n"}
}' <<< "$file"
Hors ligne
#4 Le 13/04/2020, à 13:36
- Watael
Re : [Résolu] Awk variable avec parenthèses
plutôt que d'appeler sed, je ferais un sub() dans le BEGIN de awk.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 14/04/2020, à 09:22
- Compte supprimé
Re : [Résolu] Awk variable avec parenthèses
plutôt que d'appeler sed, je ferais un sub() dans le BEGIN de awk.
Voici une autre solution qui m'a été donnée.
#!/bin/bash
file="/home/user/fichier (1).txt"
awk -v var="$file" '{{gsub (/[()]/,_)}
if ($0 ~ var) {printf "%s\n" ,var}
else {printf "Echec\n"}
}' <<< "$file"
Merci à tous de votre aide !
#6 Le 14/04/2020, à 15:07
- Watael
Re : [Résolu] Awk variable avec parenthèses
mais, ça va effectuer le remplacement pour chaque ligne, sur toute la ligne...
awk -v var='fichier(1).txt' 'BEGIN{gsub("\\(","\\(",var); gsub("\\)","\\)",var)} $0~var{...<les opérations à réaliser>...}'
c'est un poil plus lourd à écrire, mais ce n'est exécuté qu'une seule fois.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 15/04/2020, à 09:04
- Compte supprimé
Re : [Résolu] Awk variable avec parenthèses
@ Watael
Merci !