2014-02-03 6 views
0

Как я могу напечатать количество слов в указанном файле в сценарии bash. Например, он будет работать какПодсчитайте количество слов в файле, bash script

cat test | ./bash_script.sh 

cat test 

Hello World 
This is a test 

Выход работает cat test | ./bash_script будет выглядеть

Word count: 6. 

Я знаю, что это может быть сделано без сценария. Я пытаюсь реализовать wc -w в сценарий bash, который будет считать слова, как показано выше. Любая помощь приветствуется! Спасибо

+0

Вот 6 слов! ;) http://www.cyberciti.biz/faq/finding-bash-shell-array-length-elements/ http://stackoverflow.com/questions/5382712/bash-how-to-tokenize-a- string-variable Эти 2 ссылки должны помочь вам. Первый из них - как рассчитать длину массива, второй - как токенизировать строковую переменную в массив – TheOneWhoPrograms

+5

, почему бы просто не запустить ваш скрипт bash 'wc -w'? Это * НЕ * вид задачи, с которой скрипт оболочки является хорошим инструментом, и хотя можно управлять винтом с помощью молотка, который не стоит делать. – keshlam

+0

один способ показан здесь http://stackoverflow.com/a/7045517/297323, но, как заявил другой, не надо! –

ответ

-1

Я считаю, что вам нужно, это функция, которую вы могли бы добавить к вашему Bashrc:

function script1() { wc -w $1; } 

script1 README.md 
335 README.md 

Вы можете добавить функцию в файл .bash_rc и называем это то, что вы хотите на следующей консоли или если вы источник файл .bashrc, то он будет загружаться в функции ... с тех пор вы можете назвать имя функции, как вы видите, с файлом, и это даст вам рассчитывать

3

если данный поток ввода, как показано ниже:

while read -a words; do ((num += ${#words[@]})); done 
echo Word count: $num. 

Расширение от @FredrikPihl связи дал в комментарии: это читает из каждого файла, указанного в качестве аргумента или из стандартного ввода, если файлы не дано:

for f in "${@:-/dev/stdin}"; do 
    while read -a words; do ((num += ${#words[@]})); done < "$f" 
done 
echo Word count: $num. 

это должно быть быстрее:

for f in "${@:-/dev/stdin}"; do 
    words=($(< "$f")) 
    ((num += ${#words[@]})) 
done 
echo Word count: $num. 
0

Вы можете развернуть содержимое файла в качестве аргументов и пересказать количество аргументов в скрипте.

$# Раскрывается в число аргументов сценария

#!/bin/bash 

echo "Word count: $#." 

Затем выполните:

./bash_script.sh $(cat file)

0

Попробуйте это:
wc -w *.md | grep total | awk '{print $1}'

Смежные вопросы