You can also use sed
while read line
do
echo $line | sed s/'\(.*\);\(.*\);\(.*\);\(.*\)/\4;\3;\2;\1/'
done
in shell you can give command
./reverse_pattern.sh < csv.txt, where reverse_pattern.sh is above script and csv.txt is input file
you can make it generic by using this script
#!/bin/bash
outputpat=
inputpat=
patternform=
delimiter=\;
#calulate num delimiter and form pattern
form_pattern()
{
count=$(echo "$1"|grep -o "$delimiter"| wc -w)
for((i=count+1;i>1;i--))
do
outputpat="$outputpat\\$i$delimiter"
done
outputpat="$outputpat\\$i" #last word not followed by ;
for((i=0;i<count;i++))
do
inputpat="$inputpat\\(.*\\)$delimiter"
done
inputpat="$inputpat\\(.*\\)" #last word not followed by ;
patternform=yes
}
while read line
do
if [ -z $patternform ]
then
form_pattern $line
fi
echo $line | sed s/$inputpat/$outputpat/
done