I needed to code a script that would read through a text file and process some data. The format of the file was as follows:
Item Id|Item Name
01|Car
02|Bus
03|Plane
The code was:
#!/usr/bin/ksh
for parm_line in `cat dean_test.txt`
do
export item_id=$(echo $parm_line | cut -f1 -d\|)
export item_name=$(echo $parm_line | cut -f2 -d\|)
if [ $item_id != "Item Id" ]; then
echo $parm_line
fi
done
My expectation was that it would skip the header line and process the three data lines. The output looked like:
Item
Id|Item
Name
01|Car
02|Bus
03|Plane
This was being caused by the fact that the header row had spaces in the names of the fields. I had to change the code as follows and add the IFS:
#!/usr/bin/ksh
IFS=$'\n'
for parm_line in `cat dean_test.txt`
do
export item_id=$(echo $parm_line | cut -f1 -d\|)
export item_name=$(echo $parm_line | cut -f2 -d\|)
if [ $item_id != "Item Id" ]; then
echo $parm_line
fi
done
This change fixed the issues and I got the correct output:
01|Car
02|Bus
03|Plane
The short snippet of code was part of a much larger script. I could not use a WHILE loop as I was going to be issuing ssh commands.