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 Input
Field
Separator (
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'.
CategoryUnixShellPattern