The characters 6-13 is a date column for which the value has to be 8 digits. I don't need to validate the date format that its an actual date, only that the value is 8 digits.
I am able to do a freq on the file which will tell me the counts per value:
If you are reading the file in line by line in a loop, you could add this type of thing too:-
i=0
while read col1 col2 col3 col4 col5
do
((i=$i+1))
if [ "${#col3}" -ne 8 ]
then
echo "Error on line $i"
sed -n${i}p file # Read out the illegal line directly from the file
fi
done < file
Does that give you an option to the above suggestion? Which way suits your existing code?
Thanks Chubler_XL, Robin and RudiC. This is really helpful.
I changed Chubler_XL's code to use 8 characters and it is working perfectly.
Robin - Thanks for your suggestion. The test file I have provided here is just a sample. The original file have over 150 columns and is a big file with around 1MM records per cycle.
I think the if statement will be better for this file so we dont' have to read all records.
RudiC - your suggestion on exit when you hit an invalid entry is really good. That way we don't have to go through the entire file.