Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/04/2020, à 12:43

Compte supprimé

[Résolu] Awk variable avec parenthèses

Bonjour les ami(e)s smile

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,

man awk -> Regular Expressions a écrit :

       (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.

En ligne

#5 Le 14/04/2020, à 09:22

Compte supprimé

Re : [Résolu] Awk variable avec parenthèses

Watael a écrit :

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.

En ligne

#7 Le 15/04/2020, à 09:04

Compte supprimé

Re : [Résolu] Awk variable avec parenthèses

@ Watael

Merci ! cool