Re-usable function to parse csv files with different number of fields

Hi there, been pondering how to deal with this and hoping someone would give me an insight on this.

I need help on creating a reusable bash funtion to parse csv files containing different number of fields (comma-seperated).

My initial thought is to create function for each input csv file (20+ of them, which means I have to create 20+ functions).

Appreciate any help.

Thanks.

I store my ksh script config settings externally and separate them by colons; you can change the cut delimiter to a comma. When needed in the process I call the following parse_parms function and set the requisite number of parms. Might not be optimal, but it's quick like a bunny and it keeps my logging:

###########################
#  function Parse_Parms ...
#     - Parse arguments based on ${my_mthd} arg...
function parse_parms
{

   $_dbg_mode

   print "\n\tGreetings from parse_parms ($@) "              >>${MY_LOG}
2>&1

   print "\n\tParsing parms per config file: ${config_file}" >>${MY_LOG}

   export args_rcd=$(grep -i "^${my_mthd}:" ${config_file} |grep -v "#" |tr
" " "_" )

   typeset -i parms_count=$(print $(print ${args_rcd} |tr ":" "\n" |wc -l )
+ 0 |bc )

   typeset -i  arg_num="1"

   while (( ${arg_num} <= ${parms_count} ))
   do
      print "Setting arg_num${arg_num}: "
      export param_num${arg_num}=$(print "$(echo "${args_rcd}" |cut -d":"
-f${arg_num} )")
      arg_num=$(print "${arg_num} + 1" |bc )
   done

   print "\tFinished Parsing your args..."                   >>${MY_LOG}

#  If there are no explicitly set params, then there's nothing to
do...exit...
   if [[ $(set |grep param_num ) == "param_num1=''" ]]
   then
      print "\n    ***\n   ${my_name}: $(date) "             |tee -a
${MY_LOG}
      print "   Parameters not found for ${my_mthd}..."      |tee -a
${MY_LOG}
      print "                                         "      |tee -a
${MY_LOG}
      print "   Called as: $0 ${*} \n    ***\n"              |tee -a
${MY_LOG}
      error_flag='Y' ; logger_heads ; return 2
#  Print the list of params otherwise...
   else
#     If this is an FTP process, then hide the password string...
      if [[ ${my_mthd} == "ftp" ]]
      then
         typeset -l  passed_word='[hidden]'
      fi
         print "\n\tCalled as:  $0 ${@} \n" \
            "\tParameters: ${param_num1} \n " \
            "\t            ${param_num2:-"#"} \n " \
            "\t            ${param_num3:-"#"} \n " \
            "\t            ${passed_word:-${param_num4}} \n " \
            "\t            ${param_num5-"#"} \n " \
            "\t            ${param_num6-"#"} \n " \
            "\t            ${param_num7-"#"} \n " \
            "\t            ${param_num8-"#"} \n " \
            "\t            ${param_num9-"#"} \n " \
            "\t            ${param_num10:-"#"} \n " \
            "\t            ${param_num11:-"#"} \n " \
            "\t            ${param_num12:-"#"} \n " \
            "\t            ${param_num13:-"#"} \n " \
            "\t            ${param_num14:-"#"} \n " \
            "\t            ${param_num15:-"#"} \n " |grep -v "#" \
                                                             |tee -a
${MY_LOG}
   fi

   echo "nicely done"

   return

}

Thanks, curleb.