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
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top