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 ...
Notez que le noeud du problème est le caractère de tuyau, pas la commande utilisée. Mais c'est une bonne solution. –
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. ;-) –
Serait 'cut -d '|' -f FICHIER FILM NOM ' – Andrea