In this awk tutorial we're going to see how to count words in a file and display it.
And in a second time, we will see how to check if a name, inside a file, is present in the first file.
Let's check it.
In the BEGIN pattern we specify the separator with the FS builtin variable. In our case, it will be the default one, the space character.
In the dev pattern, we are going to retrieve each word. We use the FNR and the NF builtin variables.
FNR returns the number of the current line.
NF returns the number of words on the line.
Then we add all the words inside the dic[] array.
In the END pattern, we check if the word inside the "name.txt" file is present inside the "students.txt" one.
John 5 12 8 Akio 15 16 14 Ortallia 2 8 6 Markus 11 9 12
Akio
#!/bin/awk # Begin BEGIN { FS=" "; } # Dev { i = 0; nbWords = 0; while (i < FNR) { nbWords += NF; i++; } for (word = 1; word <= NF; word++) { dic[$word]++; } } # End END { getline < "name.txt"; printf "There are " nbWords " words and " FNR " lines.\n" ; for (k in dic) { if (k == $0) printf("The word %s has been found %i time.\n", k, dic[k]); } }
awk -f bp8.awk students.txt
There are 16 words and 4 lines. The word Akio has been found 1 time.
We are able now to count words and check if a word in a file is present also in another.
Well done, you've made it.
Add new comment