0
votes

Trouver la valeur de colonne * en utilisant awk

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é xxx

pour < / p> xxx

Ils courent, mais ne pas imprimer quoi que ce soit (mais je sais qu'il y a * valeurs dans le fichier)

et repose ils obtiennent une erreur de syntaxe ou erreur de regex

Que puis-je faire pour résoudre ce problème ???


0 commentaires

3 Réponses :


2
votes

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


3 commentaires

Si vous avez vraiment lavé, vous pouvez utiliser une regex; si ($ 4 ~ '/ ^ \ \ \ * $ /) . Je ne recommande pas cela; Je souligne juste comment utiliser correctement des barres obliques. Notez l'opérateur ~ au lieu de == et de la barre oblique inverse pour échapper à l'astérisque, sinon un métacaracter dans Regex.


Peut-être aussi expliquer comment si ($ 4 == '*') est transmis comme si ($ 4 == *) (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.



0
votes

J'utiliserais la fonction index () : xxx

index (s, t) renvoie la position de la sous-chaîne t dans s ou 0 si t n'a pas été trouvé dans s .

Le programme ci-dessus utilise la fonction index () comme une condition. awk imprimera la ligne en cours si cette condition devient true-ish. 0 , non trouvé, est faux-ish dans awk. Une version plus explicite du programme ci-dessus serait: xxx


0 commentaires

1
votes

Utiliser un motif AWK pour mettre en œuvre la condition xxx


3 commentaires

Vous n'utilisez pas motifs


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 , ne savait pas que