processLine(){
line="$@" # get all args
# just echo them, but you may need to customize it according to your need
# for example, F1 will store first field of $line, see readline2 script
# for more examples
# F1=$(echo $line | awk '{ print $1 }')
echo $line
}
### Main script stars here ###
# Store file name
FILE=""
# Make sure we get file name as command line argument
# Else read it from standard input device
if [ "$1" == "" ]; then
FILE="/dev/stdin"
else
FILE="$1"
# make sure file exist and readable
if [ ! -f $FILE ]; then
echo "$FILE : does not exists"
elif [ ! -r $FILE ]; then
echo "$FILE: can not read"
fi
fi
# read $FILE using the file descriptors
# Set loop separator to end of line
BAKIFS=$IFS
IFS=$(echo -en "\n\b")
do
# use $line variable to process line in processLine() function
processLine $line
done
# restore $IFS which was used to determine what the field separators are
IFS=$BAKIFS
cHJvY2Vzc0xpbmUoKXsKICBsaW5lPSIkQCIgIyBnZXQgYWxsIGFyZ3MKICAjICBqdXN0IGVjaG8gdGhlbSwgYnV0IHlvdSBtYXkgbmVlZCB0byBjdXN0b21pemUgaXQgYWNjb3JkaW5nIHRvIHlvdXIgbmVlZAogICMgZm9yIGV4YW1wbGUsIEYxIHdpbGwgc3RvcmUgZmlyc3QgZmllbGQgb2YgJGxpbmUsIHNlZSByZWFkbGluZTIgc2NyaXB0CiAgIyBmb3IgbW9yZSBleGFtcGxlcwogICMgRjE9JChlY2hvICRsaW5lIHwgYXdrICd7IHByaW50ICQxIH0nKQogIGVjaG8gJGxpbmUKfQogCiMjIyBNYWluIHNjcmlwdCBzdGFycyBoZXJlICMjIwojIFN0b3JlIGZpbGUgbmFtZQpGSUxFPSIiCiAKIyBNYWtlIHN1cmUgd2UgZ2V0IGZpbGUgbmFtZSBhcyBjb21tYW5kIGxpbmUgYXJndW1lbnQKIyBFbHNlIHJlYWQgaXQgZnJvbSBzdGFuZGFyZCBpbnB1dCBkZXZpY2UKaWYgWyAiJDEiID09ICIiIF07IHRoZW4KICAgRklMRT0iL2Rldi9zdGRpbiIKZWxzZQogICBGSUxFPSIkMSIKICAgIyBtYWtlIHN1cmUgZmlsZSBleGlzdCBhbmQgcmVhZGFibGUKICAgaWYgWyAhIC1mICRGSUxFIF07IHRoZW4KICAJZWNobyAiJEZJTEUgOiBkb2VzIG5vdCBleGlzdHMiCiAgCWV4aXQgMQogICBlbGlmIFsgISAtciAkRklMRSBdOyB0aGVuCiAgCWVjaG8gIiRGSUxFOiBjYW4gbm90IHJlYWQiCiAgCWV4aXQgMgogICBmaQpmaQojIHJlYWQgJEZJTEUgdXNpbmcgdGhlIGZpbGUgZGVzY3JpcHRvcnMKIAojIFNldCBsb29wIHNlcGFyYXRvciB0byBlbmQgb2YgbGluZQpCQUtJRlM9JElGUwpJRlM9JChlY2hvIC1lbiAiXG5cYiIpCmV4ZWMgMzwmMApleGVjIDA8IiRGSUxFIgp3aGlsZSByZWFkIC1yIGxpbmUKZG8KCSMgdXNlICRsaW5lIHZhcmlhYmxlIHRvIHByb2Nlc3MgbGluZSBpbiBwcm9jZXNzTGluZSgpIGZ1bmN0aW9uCglwcm9jZXNzTGluZSAkbGluZQpkb25lCmV4ZWMgMDwmMwogCiMgcmVzdG9yZSAkSUZTIHdoaWNoIHdhcyB1c2VkIHRvIGRldGVybWluZSB3aGF0IHRoZSBmaWVsZCBzZXBhcmF0b3JzIGFyZQpJRlM9JEJBS0lGUwpleGl0IDA=