Linux – Applying Unix’s Head on AWK Through Find Command

awkfindheadlinuxunix

I want to output top 10 lines of AWK command in the list of files given by find,
using this snippet:

$ find . -name "*.txt" -print -exec awk '$9 != ""'  \| head -n10 {} \;

Note also that I want to print out the file names being processed.

But why I get such error:

awk: cmd. line:2: fatal: cannot open file `|' for reading (No such file or directory)
./myfile.txt

What's the right way to do it?

I tried without backslash before the pipe. Still it gave an error:

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

Best Answer

When running a command with find's -exec, you don't get all the nice shell things like the pipe operator (|). You can regain them by explicitly running a subshell if you like though, eg:

find . -name '*.txt' -exec /bin/sh -c "echo a text file called {} | head -n 15" \;

Related Topic