Comment couper un espace d’une chaîne dans un script shell Unix

Je lis un fichier et découpe une colonne en fonction d’une logique. Mon problème est que je ne peux pas couper une colonne avec un espace.

Ceci est le code pour tester –

st="1|alalhabad|up|tushar|kesarwani|90| mls k|19990|india|420|24|m" HardErrorCheckColumnValue=`echo $st | cut -d'|' -f7` echo $HardErrorCheckColumnValue 

La sortie devrait être –

  mls k 

Mais je commence

 mls k 

Comment puis-je ne pas couper les espaces avant ou arrière? Il devrait donner de l’espace, même s’il ne contient que de l’espace.

Vous devez utiliser des guillemets autour de vos variables:

 HardErrorCheckColumnValue=$(echo "$st" | cut -d'|' -f7) echo "$HardErrorCheckColumnValue" mls k 

Mieux vaut utiliser $(...) au lieu du back-tick à l’ancienne pour la substitution de commandes.

awk vous aidera avec ça

 $ cat file.dat 1|alalhabad|up|tushar|kesarwani|90| mls ki |19990|india|420|24|m $ awk -F"|" '{print "|"$7"|"}' file.dat | mls ki | || 

EDIT 2

Si vous faites écho à la variable st, il y a un problème là où certains espaces disparaissent:

vérifier la différence:

 $ st="1|alalhabad|up|tushar|kesarwani|90| mls k|19990|india|420|24|m" $ echo $st 1|alalhabad|up|tushar|kesarwani|90| mls k|19990|india|420|24|m <-- ONE SPACE GONE $ cat file.dat 1|alalhabad|up|tushar|kesarwani|90| mls ki |19990|india|420|24|m $ awk -F"|" '{print "|"$7"|"}' file.dat | mls ki | <---- SPACE OK || 

Protégez votre variable avant de l’imprimer:

 echo "$HardErrorCheckColumnValue" 

Sans la citation, elle est étendue à echo mls k , alors qu’avec elle, elle est étendue à echo " mls k"

Mais comme l’a souligné @Mat, les dégâts ont déjà été faits. Alors, référez-vous à la réponse de @anubhava 🙂