Shell script that accept a list of file names as arguments count and report the occurrence of each word.
What does $@ mean in a shell script?
$@ refers to all of a shell script’s command-line arguments. $1 , $2 , etc., refer to the first command-line argument, the second command-line argument, etc. Place variables in quotes if the values might have spaces in them.
Shell Script that accepts a list of file names as arguments and counts the occurrence of each word
#!/bin/bash
# Loop through all arguments (filenames)
for file in "$@"; do
# Check if file exists
if [ ! -f "$file" ]; then
echo "File $file does not exist."
continue
fi
# Count the occurrence of each word
echo "Word count for $file:"
cat "$file" | tr '[:upper:]' '[:lower:]' | tr -cs '[:alpha:]' '\n' | sort | uniq -c | sort -nr
done
Let’s break down how this script works:
- We start by looping through all arguments (filenames) passed to the script using the
$@variable. - For each file, we check if it exists using the
-foption of thetestcommand. If the file does not exist, we print an error message and move on to the next file. - If the file exists, we count the occurrence of each word using a combination of shell commands:
catreads the contents of the file and outputs them to stdout.tris used to convert all uppercase letters to lowercase, and to replace all non-alphabetic characters with newline characters. This separates each word into its own line.sortsorts the words in alphabetical order.uniq -ccounts the occurrence of each unique word and outputs the result.- Finally,
sort -nrsorts the result in descending order by word count.
The output will display the occurrence of each word in the specified file(s).
Note: This script assumes that each word is separated by whitespace. If your files contain words separated by other characters (e.g., punctuation marks), you may need to modify the tr command accordingly.
Suppose, we have two text file one is test.txt and another is testone.txt
Test.txt file
DevOps is a set of practices, tools, and a cultural philosophy that automate and integrate the processes between software development and IT teams.
Testone.txt file
DevOps is a collaboration between Development and IT Operations to make software production and Deployment in an automated & repeatable way.
Run the script, one above two files.
~/Assignment$ bash main.sh text.txt
File text.txt does not exist.
~/Assignment$ bash main.sh test.txt testone.txt
Word count for test.txt:
3 and
2 a
1 tools
1 the
1 that
1 teams
1 software
1 set
1 processes
1 practices
1 philosophy
1 of
1 it
1 is
1 integrate
1 devops
1 development
1 cultural
1 between
1 automate
Word count for test1.txt:
2 and
1 way
1 to
1 software
1 repeatable
1 production
1 operations
1 make
1 it
1 is
1 in
1 devops
1 development
1 deployment
1 collaboration
1 between
1 automated
1 an
1 aThank you for reading, If you have reached so far, please like the article, It will encourage me to write more such articles. Do share your valuable suggestions, I appreciate your honest feedback!