J'ai essayé de résoudre le problème mais je ne peux pas résoudre la dernière partie où elle est donnée comme "supposons que le nom de fichier est donné comme argument de ligne de commande"
écrire un script shell qui affiche le nombre total de mots, caractères, lignes un fichier. Supposez que le nom du fichier est donné en tant qu'argument de ligne de commande. P>
echo c=$( wc -c < test.txt) echo "Number of characters in test.txt is $c" echo w=$( wc -w < test.txt) echo "Number of words in test.txt is $w" echo l=$( ec -l < test.txt) echo "Number of lines in test.txt is $l"
9 Réponses :
Cela devrait fonctionner. Écrire un script the_script.sh comme suit: pour expliquer, alors dans la boucle, reportez-vous à la référence à exécuter: p> Comme d'autres personnes ont noté, vous devez éviter d'exécuter $ {*} code> est ll la ligne de commande args est passée et lorsqu'il est utilisé avec TeH
Pour code> boucle comme au-dessus de chaque argument est Assin à
$ f code> dans chaque itération de la boucle. p>
$ {F } code> comme nom de fichier. p>
wc code > trois fois si les fichiers sont volumineux, voici un moyen de l'exécuter juste une fois et traiter les comptes: p>
Vous voulez "$ @" code>, pas non noté
$ * code>, pour gérer tous les arguments valides. Vous devez également citer
$ f code>.
passed=$1 echo echo -n "Number of characters in $passed is " wc -c < $passed echo echo -n "Number of words in $passed is " wc -w < $passed echo echo -n "Number of letters in $passed is " wc -l < $passed
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant pourquoi i> et / ou comment i> ce code répond à la question améliore sa valeur à long terme.
for D in ${*} do echo c=$( wc -c < ${D}) echo "Number of Characters in ${D} is $c" echo w=$( wc -w < ${D} ) echo "Number of Words in ${D} is $w" echo l=$( wc -l < ${D}) echo "Number of lines in ${D} is $l" done
Veuillez corriger le formatage (sous forme de code) et expliquer votre code
S'il vous plaît ne publiez pas uniquement le code comme réponse, mais inclure une explication de vos codes et de la manière dont il résout le problème de la question. Les réponses avec une explication sont généralement de qualité supérieure et plus susceptibles d'attirer des upvotes.
cela fonctionnera em>
** Vous pouvez également aller avec ce format facile **
for F in test.txt do echo c=$( wc -c < test.txt ) echo "number in test.txt is $c" done
echo "Number of characters in $1 is $(wc -m < $1)" echo "Number of words in $1 is $(wc -w < $1)" echo "Number of lines in $1 is $(wc -l < $1)" You need to replace test.txt with $1 while printing. This will clear both the test cases..
Essayez celui-ci, cela fonctionne bien. Tous les tests effacés
for F in $* do echo c=$( wc -c < ${F} ) echo "Number in characters in ${F} is $c" echo w=$( wc -w < ${F} ) echo "Number in words in ${F} is $w" echo l=$( wc -l < ${F} ) echo "Number in lines in ${F} is $l" done
Utilisez cette solution simple:
Fondamentalement, il a donné dans le problème que le nom du fichier sera adopté un argument de ligne de commande. Donc, fondamentalement, vous pouvez imprimer le nom du fichier en utilisant cet argument de ligne de commande en tant que variable (ce n'est pas test.txt pour tous les cas de test).
Voici mon code qui a été accepté dans la plate-forme Tekstac -
Indice: le premier argument de ligne de commande passée à votre script est
1 $ code>.
Pas besoin d'exécuter
wc code> trois fois. Le dernier a une faute de frappe!
Vérifiez la page manuelle pour
WC code>. Vous trouverez que vous n'avez pas besoin des options. Faites une recherche Google de «Comment écrire un script Bash avec des arguments». C'est pas difficile.
N'utilisez jamais une variable nommée
l code> car il ressemble beaucoup trop au nombre
1 code> (indiscernable dans certaines polices) et donc obglise votre code.