Actuellement, j'ai un fichier avec plusieurs colonnes et sur mes 4,5èmes colonnes, les valeurs NULL sont affichées comme *
J'ai essayé p> pour < / p> Ils courent, mais ne pas imprimer quoi que ce soit (mais je sais qu'il y a * valeurs dans le fichier) p> et repose ils obtiennent une erreur de syntaxe ou erreur de regex p> Que puis-je faire pour résoudre ce problème ??? p> p>
3 Réponses :
awk code> Les chaînes sont enfermées dans des guillemets doubles. Le script
awk code> est normalement mis en guillemets simples, et si vous utilisez également des guillemets simples autour des chaînes
AWK CODE>, ils terminent la chaîne de shell, ne délimit pas la chaîne AWK (et Shell Citations simples ne fournissez aucun mécanisme d'échappement).
awk '{if ($4 == "*") print}' filename
Si vous avez vraiment lavé, vous pouvez utiliser une regex; si ($ 4 ~ '/ ^ \ \ \ * $ /) code>. Je ne recommande pas cela; Je souligne juste comment utiliser correctement des barres obliques. Notez l'opérateur
~ code> au lieu de
== code> et de la barre oblique inverse pour échapper à l'astérisque, sinon un métacaracter dans Regex.
Peut-être aussi expliquer comment si ($ 4 == '*') code> est transmis comme
si ($ 4 == *) code> (qui est évidemment une erreur de syntaxe) une fois que la coque a géré les citations simples et Awk est sur le point de commencer à exécuter.
@tripleee j'ai ajouté une phrase sur la manière dont les citations simples terminent la chaîne de coque.
J'utiliserais la fonction Le programme ci-dessus utilise la fonction index () code>:
index (s, t) code> renvoie la position de la sous-chaîne
t code> dans
s code> ou
0 code> si
t code> n'a pas été trouvé dans
s code>. p>
index () code> comme une condition.
awk code> imprimera la ligne en cours si cette condition devient true-ish.
0 code>, non trouvé, est faux-ish dans awk. Une version plus explicite du programme ci-dessus serait: p>
Utiliser un motif AWK pour mettre en œuvre la condition
Vous n'utilisez pas motifs i>
Dans les programmes 'AWK', chaque énoncé envisage de prendre en compte "modèle {action-déclaration}". Le motif peut être regex, expressions, etc. ne faisant pas référence au modèle de nom de fichier Bash.
j'ai compris. La page Man fait effectivement référence à ces conditionnels que modèles i>, ne savait pas que