I have to search for all the lines from a file which contain a given word exactly k times. I think that I should use grep/sed/awk but I don’t know how. My idea was to check every line by line using sed
and grep
like this:
line=1 while [ (sed -n -'($line)p' $name) -n ]; do if [ (sed -n -'($line)p' $name | grep -w -c $word) -eq "$number" ]; then sed -n -'($line)p' $name fi let line+=1 done
My first problem is that I get the following error : syntax error near unexpected token 'sed'
. Then I realize that for my test file the command sed -n -'p1' test.txt | grep -w -c "ab"
doesn’t return the exact number of apparitions of “ab” in the first line from my file (it returns 1 but there are 3 apparitions).
My test.txt
file:
abc ab cds ab abcd edfs ab kkmd ab jnabc bad ab abcdefghijklmnop ab cdab ab ab abcde bad abc cdef a b
Advertisement
Answer
awk
to the rescue!
$ awk -F'\<ab\>' -v count=2 'NF==count+1' file kkmd ab jnabc bad ab
note that <
and >
word boundaries might be gawk
specific.
for variable assignment, I think easiest will be
$ word=ab; awk -F"\<$word\>" -v count=2 'NF==count+1' file kkmd ab jnabc bad ab