How to run grep inside awk?

awk, bash, grep, linux

Solution

Try following

awk '{print $1}' input.txt | xargs -n 1 -I pattern grep -rn pattern dir

Problem

Suppose I have a file `input.txt` with few columns and few rows, the first column is the key, and a directory `dir` with files which contain some of these keys. I want to find all lines in the files in `dir` which contain these key words. At first I tried to run the command ``` cat input.txt | awk '{print $1}' | xargs grep dir ``` This doesn't work because it thinks the keys are paths on my file system. Next I tried something like ``` cat input.txt | awk '{system("grep -rn dir $1")}' ``` But this didn't work either, eventually I have to admit that even this doesn't work ``` cat input.txt | awk '{system("echo $1")}' ``` After I tried to use `\` to escape the white space and the `$` sign, I came here to ask for your advice, any ideas? Of course I can do something like ``` for x in `cat input.txt` ; do grep -rn $x dir ; done ``` This is not good enough, because it takes two commands, but I want only one. This also shows why `xargs` doesn't work, the parameter is not the last argument

Original source