L'application Head Unix sur AWK Par commande Rechercher
Question
Je veux sortie top 10 lignes de commande AWK dans la liste des fichiers fournis par find, en utilisant cet extrait:
$ find . -name "*.txt" -print -exec awk '$9 != ""' \| head -n10 {} \;
Notez également que je veux imprimer les noms de fichiers en cours de traitement.
Mais pourquoi je reçois cette erreur:
awk: cmd. line:2: fatal: cannot open file `|' for reading (No such file or directory)
./myfile.txt
Quelle est la bonne façon de le faire?
J'ai essayé sans barre oblique inverse avant le tuyau. Néanmoins, il a donné une erreur:
find: missing argument to `-exec'
head: cannot open `{}' for reading: No such file or directory
head: cannot open `;' for reading: No such file or directory
La solution
Si vous voulez exécuter un programme awk sur tous les fichiers de constater que les imprimés que les 10 premières lignes chaque fois .
$ find . -name "*.txt" -print -exec awk '$9 != "" && n < 10 {print; n++}' {} \;
Autres conseils
Lors de l'exécution d'une commande avec exec de trouver, vous ne recevez pas toutes les belles choses shell comme l'opérateur de barre verticale (|). Vous pouvez les retrouver en exécutant explicitement un sous-shell si vous voulez bien, par exemple:
trouver. -name '* txt' exec / bin / sh -c "echo un fichier texte appelé {} | tête -n 15" \;
Sur la base de la réponse de Ashawley:
find . -name "*.txt" -print -exec awk '$9 != "" {print; if(NR > 9) exit; }' {} \;
Il devrait mieux fonctionner, comme nous quitter AWK après le 10 enregistrement.
En utilisant awk
ne devrait fonctionner:
find . -name "*.txt" -print -exec awk '{if($9!=""&&n<11){print;n++}}' {} \;
Vous pouvez le faire de cette façon aussi:
find . -name '*txt' -print -exec awk 'BEGIN {nl=1 ;print FILENAME} $9 !="" {if (nl<11) { print $0 ; nl = nl + 1 }}' {} \;
sans head
.