Outra resposta, um pouco mais simples que as outras:
#!/bin/bash
fields=$(sed -r -e 's/-1/ /g' -e 's/,/ FS /g' \
-e 's/([0-9]+)/\$/g' control_file.txt)
awk -F, "{print ${fields}}" $1
O primeiro comando converte control_file.txt
em um comando awk
adequado:
$1 FS $3 FS $5 FS FS $8 FS FS $4
para executá-lo:
$ ./script.sh input.csv
col1,col3,col5,,col8,,col4
1,3,5,,8,,4
9,11,13,,16,,12
Na sua outra amostra:
$ ./script.sh sample.csv
BP ID,CurrentMonetary balance ,Provider contract id,,End Date,,charge Plan names
1100001538,251,00000000000000000141,,18-Oct-12,,[B2] R2 LTE CHARGE PLAN
1100003404,45.22,00000000000000009349,,23-Nov-13,,B0.3 ECS_CHARGE_PLAN DROP1 V3