Je veux faire ce qui suit
awk 'BEGIN {FS=" ";} {printf "'%s' ", $1}'
Mais échapper à la citation simple de cette façon ne fonctionne pas
awk 'BEGIN {FS=" ";} {printf "\'%s\' ", $1}'
Comment faire ça? Merci pour l'aide.
C'est peut-être ce que vous cherchez:
awk 'BEGIN {FS=" ";} {printf "'\''%s'\'' ", $1}'
C'est-à-dire qu'avec '\''
vous fermez le '
d'ouverture, puis imprimez un '
littéral en l'échappant et ouvrez à nouveau le '
à nouveau.
Un seul devis est représenté avec \x27
Comme dans
awk 'BEGIN {FS=" ";} {printf "\x27%s\x27 ", $1}'
Une autre option consiste à transmettre la citation simple en tant que variable awk :
awk -v q=\' 'BEGIN {FS=" ";} {printf "%s%s%s ", q, $1, q}'
Exemple plus simple:
# Prints 'test me', _including_ the single quotes.
awk -v q=\' '{print q $0 q }' <<<'test me'
awk 'BEGIN {FS=" "} {printf "\047%s\047 ", $1}'
Pour les petits scripts, un moyen optionnel de le rendre lisible consiste à utiliser une variable comme celle-ci:
awk -v fmt="'%s'\n" '{printf fmt, $1}'
Je trouvais ça conveninet dans un cas où je devais produire plusieurs fois le caractère guillemet simple dans la sortie et que le\047 le rendait totalement illisible
$ cat > test.in
foo
bar
$ awk 'BEGIN {FS=" ";} {printf "'"'"'%s'"'"' ", $1}' test.in
'foo' 'bar'
C'est: '"'"'
entre guillemets.