...when the lines use both a colon and commas to separate the parts you want read as information.
The first version of this script used cut and other non-Bash-builtins, frequently, which made it nice and zippy with little more than average processor load in GNOME Terminal but, predictably, slow as a sloth on Valium and heavy on the CPU in Cygwin.
while read 'line';
do
n=$(echo $line)
file=$(echo -ne $n | cut -d: -f1)
tags=$(echo -ne $n | cut -d: -f2)
cate=$(echo -ne $tags | cut -d, -f1)
cred=$(echo -ne $tags | cut -d, -f2)
sour=$(echo -ne $tags | cut -d, -f3)
writ=$(echo -ne $tags | cut -d, -f4)
trans=$(echo -ne $tags | cut -d, -f5)
fixid=$(echo -ne $tags | cut -d, -f6)
objnm=$(echo -ne $tags | cut -d, -f7)
locn=$(echo -ne $tags | cut -d, -f8)
fname=`basename "$file"`
echo -e "Working on file $fname now."
I decided I wanted it to work faster, whatever it was run in.
Recently, I came across a line -- you might call it a command 'pair' -- in another script
exec 5<foo.txt
while IFS="," read -u5
for which I got help either here or on LQ. I've applied it to other scripts, and I've seen, yet again, the difference in speed a builtin often makes over an external binary. All those scripts had something in common, however: the data they read in was separated by a single delimiter, a colon or a comma, but not one of the former and several of the latter, as in my example above.
Re-working it with as much as I can get my mind around in terms of the 'read' and 'exec' commands, with only the most modest looking about on coder/scripter bulletin-board sites etc., I still can't get it to split the data in the $tags variable.
It looks like my approach is all wrong. So what would be a more useful way to go about it, keeping in mind that I want to employ more (all, if possible) builtins and stay away from "/bin" externals.
BZT