The cost of using the cut(1) program for several consecutive operations is high. In UsingXargsForRepetition, each iteration parameter was separated from the next by a newline. Unfortunately, the read Shell utility cuts on whole line boundaries. We can input lines with read and then split them using cut, separating fields by their delimiters:
while read line
do
f=`cut -f1 -d';'`
d=`cut -f2 -d';'`
c=`cut -f4 -d';'`
...
done
However, this spawns a Shell process for each parameter on each line, and most of the real time will be expended in process creation. It violates intuition to create a process to pick off each parameter. Yet we must create a new process to use cut.
Therefore:
use the InputFieldSeparator (IFS) variable and read/line/set. Use this instead of the above code:
IFS=';'
while read f d junk1 c junk2
do
...
done
The use of junk2 is important to make sure that fields following 'c' are not put into the value of 'c'.