Comment gérer l’espace dans une ligne dans un fichier en utilisant un script shell?

Mon fichier tool.txt qui contient

DC OPTIMIZER,b_csw_load_14,s_get_bn_master_14,m_get_bn_master, DC OPTIMIZER,b_csw_load_14,s_get_cu_qp_zones_14,m_get_qp_zones, DI_ODS,wf_CSW82_ACTIVITY_DATA_to_ODS,s_m_CSW_BN_MASTER_to_ODS,m_CSW_BN_MASTER_to_ODS, DI_ODS,wf_CSW82_ACTIVITY_DATA_to_ODS,s_m_CSW_IN_LOCATIONS_to_ODS,m_CSW_IN_LOCATIONS_to_ODS, 

dans mon script

 for i in `tail -n +2 /dssdev/appl/dss/sql/arun/tool.txt` do FOLDER=`echo $i|cut -d',' -f1` WORKFLOW_NAME=`echo $i|cut -d',' -f2` SESSION_NAME=`echo $i|cut -d',' -f3` MAPPING_NAME=`echo $i|cut -d',' -f4` MAPPLET_NAME=`echo $i|cut -d',' -f5` echo $FOLDER'|'$WORKFLOW_NAME'|'$SESSION_NAME'|'$MAPPING_NAME'|'$MAPPLET_NAME>>tool1.csv done 

mon fichier de sortie contient

 DC|DC|DC|DC|DC OPTIMIZER|b_csw_load_14|s_get_bn_master_14|m_get_bn_master| DC|DC|DC|DC|DC OPTIMIZER|b_csw_load_14|s_get_cu_qp_zones_14|m_get_qp_zones| DI_ODS|wf_CSW82_ACTIVITY_DATA_to_ODS|s_m_CSW_BN_MASTER_to_ODS|m_CSW_BN_MASTER_to_ODS| DI_ODS|wf_CSW82_ACTIVITY_DATA_to_ODS|s_m_CSW_IN_LOCATIONS_to_ODS|m_CSW_IN_LOCATIONS_to_ODS| 

Mais mon exigence est

 DC OPTIMIZER|b_csw_load_14|s_get_bn_master_14|m_get_bn_master| DC OPTIMIZER|b_csw_load_14|s_get_cu_qp_zones_14|m_get_qp_zones| DI_ODS|wf_CSW82_ACTIVITY_DATA_to_ODS|s_m_CSW_BN_MASTER_to_ODS|m_CSW_BN_MASTER_to_ODS| DI_ODS|wf_CSW82_ACTIVITY_DATA_to_ODS|s_m_CSW_IN_LOCATIONS_to_ODS|m_CSW_IN_LOCATIONS_to_ODS| 

L’espace entre DC et OPTIMIZER est le problème.

Vous pouvez écrire le code entier en une seule fois en tant que

 while IFS="," read -r FOLDER WORKFLOW_NAME SESSION_NAME MAPPING_NAME MAPPLET_NAME do echo "$FOLDER|$WORKFLOW_NAME|$SESSION_NAME|$MAPPING_NAME|$MAPPLET_NAME" done < input >> tool1.csv 

Donne la sortie comme

 DC OPTIMIZER|b_csw_load_14|s_get_bn_master_14|m_get_bn_master| DC OPTIMIZER|b_csw_load_14|s_get_cu_qp_zones_14|m_get_qp_zones| DI_ODS|wf_CSW82_ACTIVITY_DATA_to_ODS|s_m_CSW_BN_MASTER_to_ODS|m_CSW_BN_MASTER_to_ODS| DI_ODS|wf_CSW82_ACTIVITY_DATA_to_ODS|s_m_CSW_IN_LOCATIONS_to_ODS|m_CSW_IN_LOCATIONS_to_ODS| 

Avez-vous essayé de lire les lignes avec “read”?

 while read line do command done < file 

Ensuite, vous avez une ligne séparée et vous pouvez la diviser avec awk ou couper ...