Awk oneliner to find a string in text files

If you want to know the name of files containing a special string, grep -c is your friend. But you also get names of files not containing your string (with count = 0). If you only want the names of files containing “mystring”, awk can help you:

grep -c "mystring" * | awk ' !/:0/ '

And if you don’t even want the number of times “mystring” appears (on 1 line):

grep -c "mystring" * | awk ' !/:0/ '| awk '{split($0, a, ":"); print a[1]}'

Any other ideas?

3 thoughts on “Awk oneliner to find a string in text files

  1. Your 2 awk calls can easily be grouped:
    | awk ‘ !/:0/{split($0, a, “:”); print a[1]}’
    or shorter, taking advantage of the natural capabilities of awk to parse a line, here we tell awk that our field separator is “:” :
    | awk -F: ‘ $2 != 0 {print $1}’
    which is equivalent to
    | awk -F: ‘ $2 {print $1}’

    But I kept the best for the end ๐Ÿ˜‰
    grep -r -l “mystring” .
    does the job, without awk ๐Ÿ™‚
    I prefer “-r .” which is recursing, rather than *
    -l is displaying the matching files, isn’t it what you wanted?

Comments are closed.