I need to count one character at a time from input.txt. How do I read one character at a time under Linux / UNIX bash shell script?
The read builtin can read one character at a time and syntax is as follows:
read -n 1 c echo $c
You can setup the while loop as follows:
#!/bin/bash # data file INPUT=/path/to/input.txt # while loop while IFS= read -r -n1 char do # display one character at a time echo "$char" done < "$INPUT"
Example: Letter frequency counter shell script
#!/bin/bash INPUT="$1" # counter a=0 b=0 cc=0 # Make sure file name supplied [ $# -eq 0 ] && { echo "Usage: $0 filename"; exit 1; } # Make sure file exits else die [ ! -f $INPUT ] && { echo "$0: file $INPUT not found."; exit 2; } # the while loop, read one char at a time while IFS= read -r -n1 c do # counter letter a, b, c [ "$c" == "a" ] && (( a++ )) [ "$c" == "b" ] && (( b++ )) [ "$c" == "c" ] && (( cc++ )) done < "$INPUT" echo "Letter counter stats:" echo "a = $a" echo "b = $b" echo "c = $cc"
Run it as follows:
/tmp/readch /etc/passwd
Sample outputs:
Letter counter stats: a = 169 b = 104 c = 39
See also:
Featured Articles:
- 30 Handy Bash Shell Aliases For Linux / Unix / Mac OS X
- Top 30 Nmap Command Examples For Sys/Network Admins
- 25 PHP Security Best Practices For Sys Admins
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- 20 Linux Server Hardening Security Tips
- Linux: 20 Iptables Examples For New SysAdmins
- Top 20 OpenSSH Server Best Security Practices
- Top 20 Nginx WebServer Best Security Practices
- 20 Examples: Make Sure Unix / Linux Configuration Files Are Free From Syntax Errors
- 15 Greatest Open Source Terminal Applications Of 2012

- My 10 UNIX Command Line Mistakes
- Top 10 Open Source Web-Based Project Management Software
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- The Novice Guide To Buying A Linux Laptop











{ 4 comments… read them below or add one }
How about a script which runs Bash for me, but its output is slow, one-letter-at-a-time old school terminal looking? For example, when I run this script I am returned to a bash prompt; I run ”ls’ and the returning text is written as a single character every 1/2 second or so.
Useless but I think it sounds retro and fun :)
I don’t know about doing that with bash, but I think it would be cool for log files.
#!/bin/bash
# data file
INPUT=/var/log/messages
# while loop
while IFS= read -r -n1 char
do
# display one character at a time
echo -n “$char”
sleep .05
done < "$INPUT"
Ohh! You could ALSO, include aplay atinysound.wav after the echo line, so you get that uber-cool sound when text prints.
hi
the tutorial was very good and usefull
thank you in advance
Amir from Iran