Предположим, что имя файла задано в качестве аргумента командной строки.Написать скрипт оболочки для подсчета строк, символов и слов - PullRequest
0 голосов
/ 23 марта 2019

Я попытался решить проблему, но не могу решить последнюю часть, в которой он задан как «Предположим, имя файла задано в качестве аргумента командной строки»

Напишите скрипт оболочки, который отображает общее количество слов, символов, строк в файле. Предположим, что имя файла задано в качестве аргумента командной строки.

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"

Мне пришлось пройти 2 тестовых случая, но я проходил только один тестовый пример, так как не могу решить проблему, предполагая имя файла в качестве аргумента командной строки.

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Это должно работать.Напишите скрипт the_script.sh следующим образом:

for F in ${*}
do
   echo
   c=$( wc -c < ${F})
   echo "Number of characters in ${F} is $c"
   echo
   w=$( wc -w < ${F} )
   echo "Number of words in ${F} is $w"
   echo
   l=$( wc -l < ${F})
   echo "Number of lines in ${F} is $l"
done

Для объяснения, ${*} - это аргументы командной строки, которые передаются, и при использовании с циклом for, как указано выше, каждый аргумент присваивается $F в каждой итерации цикла.

Затем в цикле обращайтесь к ${F} в качестве имени файла.

Для запуска:

./the_script.sh text.txt test2.txt ....

Как и другиеотметил, что вам следует избегать запуска wc три раза, если файлы большие, поэтому есть один способ запустить его только один раз и обработать счет:

WC=$( wc ${F} )
l=$( echo $WC | awk '{print $1}' )
w=$( echo $WC | awk '{print $2}' )
c=$( echo $WC | awk '{print $3}' )
0 голосов
/ 15 июля 2019
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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...