-1
votes

Supposons que le nom du fichier est donné en tant qu'argument de ligne de commande. Écrivez un script shell pour compter les lignes, les caractères et les mots

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"


4 commentaires

Indice: le premier argument de ligne de commande passée à votre script est 1 $ .


Pas besoin d'exécuter wc trois fois. Le dernier a une faute de frappe!


Vérifiez la page manuelle pour WC . 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 car il ressemble beaucoup trop au nombre 1 (indiscernable dans certaines polices) et donc obglise votre code.


9 Réponses :


1
votes

Cela devrait fonctionner. Écrire un script the_script.sh comme suit: xxx

pour expliquer, $ {*} est ll la ligne de commande args est passée et lorsqu'il est utilisé avec TeH Pour boucle comme au-dessus de chaque argument est Assin à $ f dans chaque itération de la boucle.

alors dans la boucle, reportez-vous à la référence $ {F } comme nom de fichier.

à exécuter: xxx

Comme d'autres personnes ont noté, vous devez éviter d'exécuter wc trois fois si les fichiers sont volumineux, voici un moyen de l'exécuter juste une fois et traiter les comptes: xxx


1 commentaires

Vous voulez "$ @" , pas non noté $ * , pour gérer tous les arguments valides. Vous devez également citer $ f .



-2
votes
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  

1 commentaires

Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant pourquoi et / ou comment ce code répond à la question améliore sa valeur à long terme.



0
votes
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

2 commentaires

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.



0
votes

cela fonctionnera xxx

  1. 1 $ : premier argument (nom de fichier)
  2. `` (back citations): utilisé pour exécuter des commandes
  3. Options: -M: Caractères de comptage -w: compter les mots -L: Comptez les lignes

0 commentaires

0
votes

** 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


0 commentaires

0
votes
 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..

0 commentaires

-2
votes

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


0 commentaires

0
votes

Utilisez cette solution simple: xxx


0 commentaires

0
votes

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 - xxx


0 commentaires