Hi.
Adapted code from perl FAQ in shell functions for single string and for a file (does not need rev):
#!/usr/bin/env bash
# @(#) s2 Demonstrate commify a numeric string, perl in shell # functions.
# See: perldoc -q commas
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
db() { ( printf " db, ";for _i;do printf "%s" "$_i";done;printf "\n" ) >&2 ; }
db() { : ; }
cs() { echo "$1" | perl -wp -e '1 while s/^([-+]?\d+)(\d{3})/$1,$2/; ' ; }
cf() { perl -wp -e '1 while s/^([-+]?\d+)(\d{3})/$1,$2/; ' "$1" ; }
C=$HOME/bin/context && [ -f $C ] && $C perl
FILE=${1-data1}
pl " With single string:"
for number in 1 12 123 1234 12345 123456 -1 -12 -123 -1234 +1 +12 +123 +1234
do
pe " for $number, result is $( cs $number )"
done
pl " With contents of a file:"
head $FILE
pe
cf $FILE
exit 0
producing:
% ./s2
Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 2.6.26-2-amd64, x86_64
Distribution : Debian GNU/Linux 5.0.8 (lenny)
bash GNU bash 3.2.39
perl 5.10.0
-----
With single string:
for 1, result is 1
for 12, result is 12
for 123, result is 123
for 1234, result is 1,234
for 12345, result is 12,345
for 123456, result is 123,456
for -1, result is -1
for -12, result is -12
for -123, result is -123
for -1234, result is -1,234
for +1, result is +1
for +12, result is +12
for +123, result is +123
for +1234, result is +1,234
-----
With contents of a file:
999
1000
-1000
+1000
12345
1234567.1234
-1234567.1234
+1234567.1234
12345678911234567
999
1,000
-1,000
+1,000
12,345
1,234,567.1234
-1,234,567.1234
+1,234,567.1234
12,345,678,911,234,567
Best wishes ... cheers, drl