Voici mon sample.txt fichier qu'il contient suivant
31113 70:54:D2 - a-31003
31114 70:54:D2 - b-31304
31111 4C:72:B9 - c-31303
31112 4C:72:B9 - d-31302
Je dois écrire le script Shell en ce que je passe les 5 premiers caractères (par exemple 31113) comme identifiant d'entrée à un autre script. Pour cela, j'ai essayé cela
#!/bin/sh
filename='sample.txt'
filelines=`cat $filename`
while read -r line
do
id= cut -c-5 $line
echo $id
#code for passing id to other script file as parameter
done < "$filename"
mais cela ne fonctionne pas, cela me donne une erreur
cut: 31113: No such file or directory
cut: 70:54:D2 No such file or directory
31114
31111
31112
: No such file or directory
Comment puis-je faire ceci?
Si vous voulez utiliser cut
de cette façon, vous devez utiliser redirection <<<
(une chaîne ici) comme:
var=$(cut -c-5 <<< "$line")
Notez l'utilisation de l'expression var=$(command)
au lieu de id= cut -c-5 $line
. C'est la façon d'enregistrer la commande dans une variable.
Utilisez également /bin/bash
Au lieu de /bin/sh
Pour le faire fonctionner.
Code complet qui fonctionne pour moi:
#!/bin/bash
filename='sample.txt'
while read -r line
do
id=$(cut -c-5 <<< "$line")
echo $id
#code for passing id to other script file as parameter
done < "$filename"
Eh bien, c'est une doublure cut -c-5 sample.txt
. Exemple:
$ cut -c-5 sample.txt
31113
31114
31111
31112
À partir de là, vous pouvez le diriger vers n'importe quel autre script ou commande:
$ cut -c-5 sample.txt | while read line; do echo Hello $line; done
Hello 31113
Hello 31114
Hello 31111
Hello 31112
Plutôt que de canaliser echo
dans cut
, il suffit de diriger la sortie de cut
directement vers la boucle while:
cut -c 1-5 sample.txt |
while read -r id; do
echo $id
#code for passing id to other script file as parameter
done
Peut-être que vous en avez besoin, awk peut reconnaître automatiquement les espaces blancs.
awk '{print $1}' sample.txt
Veuillez vérifier l'exemple simple suivant:
while read line; do id=$(echo $line | head -c5); echo $id; done < file
où head -c5
est la bonne commande pour obtenir les 5 premiers caractères de la chaîne.
Si vous essayez de récupérer la première colonne du fichier, essayez awk
:
#!/bin/sh
filename='sample.txt'
while read -r line
do
id=$(echo $line | awk '{print $1}')
echo $id
#code for passing id to other script file as parameter
done < "$filename"
Un peu plus simple que la réponse du haut:
#!/bin/bash
filename='sample.txt'
while read -r line; do
id=${line:0:5}
echo $id
#code for passing id to other script file as parameter
done < "$filename"