LinuxForum.Fans
Тема

Как доработать скрипт ?

Автор: vanya999 8 сообщений 3287 просмотров
#353503

Суть скрипта: задается аргумент. Если аргумент является каталогом, то считается и выводится число строк, слов и символов во всех файлах каталога.
Скрипт выполняется правильно, но выводит лишнюю информацию. Команда wc выводит число и имя файла, для которого выполнялась команда. Мне имя файла не нужно. Вот мой код.

text

#!/bin/bash

PER=1 if [ $# -ne $PER ] then echo "Перезапустите программу и введите $PER аргумент" exit fi

if [ -d "$1" ] then cd "$1" for filename in * do echo "Число строк в $filename = $(wc -l $filename)" echo "Число слов в $filename = $(wc -w $filename)" echo "Число символов в $filename = $(wc -c $filename)" done else echo "Директория не найдена" fi cd ~

Я думал сделать так на выводе:

text

        echo "Число строк в $filename = $(wc -l $filename | grep [0-9])"
        echo "Число слов в $filename = $(wc -w $filename | grep [0-9])"
        echo "Число символов в $filename = $(wc -c $filename | grep [0-9])"

Но это неправильно, так как у меня в именах файлов могут быть цифры + команда grep выводит строчку, а у меня имя файла тоже содержится в строчке.
Как подправить скрипт ?

#353508
text
wc -l | cut -d" " -f1
#353513
-=Serj=- написал:
text
wc -l | cut -d" " -f1

А можете объяснить, что вы написали ? Я глянул информацию о команде cut, но разобрать не могу, что вы написали.

#353514
"vanya999" написал:
А можете объяснить, что вы написали ?
Показать
text

$ cut --help
Использование: cut КЛЮЧ… [ФАЙЛ]…
Печатает выбранные части строк из каждого ФАЙЛА на стандартный вывод.

Аргументы, обязательные для длинных ключей, обязательны и для коротких. -b, --bytes=СПИСОК выбрать только заданные байты -c, --characters=СПИСОК выбрать только заданные символы -d, --delimiter=РАЗДЕЛИТЕЛЬ использовать для разделения полей РАЗДЕЛИТЕЛЬ вместо табуляции -f, --fields=СПИСОК выбрать только заданные поля; также печатать все строки, не содержащие разделителей, если только не задан ключ -s -n (игнорируется) --complement дополнить множество выбранных байт, символов или полей -s, --only-delimited не печатать строки, не содержащие разделителей --output-delimiter=СТРОКА использовать СТРОКУ для разделения полей при выводе, по умолчанию используется разделитель для ввода --help показать эту справку и выйти --version показать информацию о версии и выйти

Используйте один и только один из ключей -b, -c или -f. СПИСКИ состоят из диапазона или нескольких диапазонов, разделенных запятыми. Выбранные части входного файла печатаются в том порядке, в котором они появляются на входе, и печатаются ровно один раз. Диапазоны задаются следующим образом:

Н Н-ный байт, символ или поле; отсчитывается от 1 Н- от Н-ного байта, символа или поля до конца строки Н-М от Н-ного до М-ного (включительно) байта, символа или поля -М от первого до М-ного (включительно) байта, символа или поля

Если ФАЙЛ не задан или задан как -, читает стандартный ввод.

Об ошибках в cut сообщайте по адресу bug-coreutils@gnu.org. Домашняя страница GNU coreutils: <[url]http://www.gnu.org/software/coreutils/[/url]> Справка по работе с программами GNU: <[url]http://www.gnu.org/gethelp/[/url]> Об ошибках в переводе сообщений «cut» сообщайте по адресу <gnu@mx.ru> Полная документация доступна по команде: info coreutils 'cut invocation'

#353516
-=Serj=- написал:
[quote="vanya999"]А можете объяснить, что вы написали ?

Показать
text

$ cut --help
Использование: cut КЛЮЧ… [ФАЙЛ]…
Печатает выбранные части строк из каждого ФАЙЛА на стандартный вывод.

Аргументы, обязательные для длинных ключей, обязательны и для коротких. -b, --bytes=СПИСОК выбрать только заданные байты -c, --characters=СПИСОК выбрать только заданные символы -d, --delimiter=РАЗДЕЛИТЕЛЬ использовать для разделения полей РАЗДЕЛИТЕЛЬ вместо табуляции -f, --fields=СПИСОК выбрать только заданные поля; также печатать все строки, не содержащие разделителей, если только не задан ключ -s -n (игнорируется) --complement дополнить множество выбранных байт, символов или полей -s, --only-delimited не печатать строки, не содержащие разделителей --output-delimiter=СТРОКА использовать СТРОКУ для разделения полей при выводе, по умолчанию используется разделитель для ввода --help показать эту справку и выйти --version показать информацию о версии и выйти

Используйте один и только один из ключей -b, -c или -f. СПИСКИ состоят из диапазона или нескольких диапазонов, разделенных запятыми. Выбранные части входного файла печатаются в том порядке, в котором они появляются на входе, и печатаются ровно один раз. Диапазоны задаются следующим образом:

Н Н-ный байт, символ или поле; отсчитывается от 1 Н- от Н-ного байта, символа или поля до конца строки Н-М от Н-ного до М-ного (включительно) байта, символа или поля -М от первого до М-ного (включительно) байта, символа или поля

Если ФАЙЛ не задан или задан как -, читает стандартный ввод.

Об ошибках в cut сообщайте по адресу bug-coreutils@gnu.org. Домашняя страница GNU coreutils: <[url]http://www.gnu.org/software/coreutils/[/url]> Справка по работе с программами GNU: <[url]http://www.gnu.org/gethelp/[/url]> Об ошибках в переводе сообщений «cut» сообщайте по адресу <gnu@mx.ru> Полная документация доступна по команде: info coreutils 'cut invocation'

[/quote]
-f1 это что ?

#353517

vanya999,

text
-d" "

- пробел в качестве разделителя

text
-f1

- вывод первого поля

#353518
-=Serj=- написал:
vanya999,
text
-d" "

- пробел в качестве разделителя

text
-f1

- вывод первого поля

Все, вопросов нет. Спасибо.

#353926
text
echo "Число строк в $filename = $(wc -l < $filename)"

и к слову - в Вашем варианте не символов а байт.

Войдите или зарегистрируйтесь, чтобы ответить.