2008-10-17 19 views

Répondre

9

Le point clé ici est que le caractère de tuyau (|) doit être échappé à la coque. Utilisez "\|" ou "'|'" pour le protéger de l'interpolation shell et lui permettre d'être passé à awk sur la ligne de commande.


Lire les commentaires que je vois que l'affiche originale présente une version simplifiée du problème initial qui impliquait le filtrage file avant de sélectionner et d'imprimer les champs. Un passage à travers grep a été utilisé et le résultat a été envoyé dans Awk pour la sélection du champ. Cela représente le cat file totalement inutile qui apparaît dans la question (il remplace le grep <pattern> file).

Fin, cela fonctionnera. Cependant, awk est en grande partie un outil de reconnaissance de modèle en lui-même, et peut être fiable pour trouver et travailler sur les lignes correspondantes sans avoir besoin d'appeler grep. Utilisez quelque chose comme:

awk -F\| '/<pattern>/{print $2;}{next;}' file 

Le bit /<pattern>/ dit awk pour exécuter l'action qui suit sur les lignes qui correspondent à <pattern>. Le {next;} à l'apparence perdue est une action par défaut sautant à la ligne suivante dans l'entrée. Cela ne semble pas nécessaire, mais j'ai cette habitude depuis longtemps ...

3

Le caractère de tuyau doit être échappé afin que le shell ne l'interprète pas. Une solution simple:

$ awk -F\| '{print $2}' file 

Un autre choix serait de citer le caractère:

$ awk -F'|' '{print $2}' file 
16

Ou il suffit d'utiliser une commande:

cut -d '|' -f FIELDNUMBER 
+0

Notez que le noeud du problème est le caractère de tuyau, pas la commande utilisée. Mais c'est une bonne solution. –

+0

J'y ai pensé, mais je préfère avoir une réponse qui explique le problème. C'est un peu le point de mon commentaire, en fait. ;-) –

+0

Serait 'cut -d '|' -f FICHIER FILM NOM ' – Andrea

0

Et 'fichier' ne contient pas de symboles de tuyauterie, de sorte ça n'imprime rien. Vous devriez soit utiliser 'cat fichier' ou simplement lister le fichier après le programme awk.

+0

Urg. Désolé pour ça. Le code d'origine grep'ed un fichier puis a envoyé la sortie à awk. J'ai désinfecté la commande, mais je ne l'ai pas testée. :( –