Скрипт, который выводит общее количество строк во всех текстовых файлах, передаваемых в качестве аргументов

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

./myScript file1 file2 file3 

он распечатает

 10 total 

(предположим, что сумма всех строк из этих трех файлов равна 10).

Я знаю, как пройти все аргументы. Я также знаю, что, чтобы получить количество строк в файле, я бы сказал:

 wc -l < fileName 

Однако, как я могу сделать это в «int», который я могу добавить к какой-то суммарной сумме?

3 Solutions collect form web for “Скрипт, который выводит общее количество строк во всех текстовых файлах, передаваемых в качестве аргументов”

Вы можете достичь своей цели, просто используя cat и конвейер:

 cat "$@" | wc -l 

Если вы действительно хотели бы суммировать вручную, вы можете сделать это с помощью awk:

 for f in "$@"; do wc -l < "$f" done | awk '{ sum+=$1 } END { print sum }' 

Или если вы действительно хотите проанализировать последнюю строку wc , удалив строку «total»:

 wc -l "$@" | awk 'END { print $1 }' 

Основываясь на ответе Йорданма:

1. Трубить все данные через один экземпляр wc -l

     если ["$ #" -gt 0]
     тогда
         cat - "$ @" |  wc -l
     еще
         эхо 0
     фи
    

    или

     cat - / dev / null "$ @" |  wc -l
    
  • Используйте -- "$@" для защиты от имен файлов, начиная с - .
  • Избегайте вызова cat без аргументов, поскольку это заставит его прочитать стандартный ввод.
  • Обратите внимание, что cat a_single_file | something cat a_single_file | something то классическая форма ужасного бесполезного использования кошки , но cat one_or_more_file(s) | something cat one_or_more_file(s) | something может быть ОК (хотя это все еще не идеально).

2. Положитесь на то, что wc выдает «общую» строку

     если ["$ #" -gt 0]
     тогда
         wc -l - / dev / null "$ @" |  хвост -1
     еще
         echo 0 всего
     фи
    

    или

     wc -l - / dev / null / dev / null "$ @" |  хвост -1
    
  • Обратите внимание, что wc выдает total строку только в том случае, если у нее есть как минимум два аргумента имени файла.

3. Используйте awk без использования wc

     если ["$ #" -gt 0]
     тогда
         awk 'END {print NR}' - "$ @"
     еще
         эхо 0
     фи
    

    или

     awk 'END {print NR}' - / dev / null "$ @"
    

Предупреждение:

Вышеприведенные команды не будут давать одинаковый ответ, если какой-либо из файлов заканчивается символом, отличным от новой строки.

 sed -ne\$= files... 

Просто sed столько файлов, сколько хотите, вместо files... и, когда он прочитает их все, он сообщит о номере строки самого $ last на своем входе.

  • Используя инструмент командной строки cURL на Mac, как можно получить данные запаса, которые возвращаются * без * запятых?
  • Почему параметр $ 0 дает мне только базовое имя вместо полного пути после преобразования x-shellscript в x-исполняемый?
  • Как я могу перенаправить вывод дочернего процесса?
  • Как передать второй аргумент в функции bash
  • Сохраните список файлов через SFTP в текстовый файл
  • sed специальный символ заменить не работает в сценарии оболочки
  • применять специальную команду для каждого репозитория git
  • Как я могу запустить этот скрипт python во всех html-файлах под каталогом?
  • Как я могу запустить скрипт, когда интернет-соединение вот-вот потеряется?
  • Вывод команды Hiding Script
  • Для цикла для переименования файлов с подсказкой для каждого имени файла
  • Interesting Posts

    Минимальная демонстрация VLC с HIP для Linux (HIPL)

    Целостность данных BTRFS (CRC32c) и целостность данных жесткого диска (сектор ECC)

    Как рекурсивно понизить пакет и его зависимости в Arch

    Сервер OpenVPN на модели Raspberry Pi 2 B ограничен 5 МБ / с Вниз / вверх

    Как сделать патч не настолько строгим?

    Найдите путь к kermit-директории, чтобы поставить после shebang (#!) В скрипте

    Yast не может получить доступ к репозиториям программного обеспечения, даже если URL-адреса доступны в браузере, а системная дата верна

    Как избежать многих уровней символических ссылок с помощью этой находки?

    `vim` приносит мне блокировку

    Получите обновляющий список запущенных определенных процессов

    Утверждение awk sed if

    Цитирование в строках ssh $ host $ FOO и ssh $ host "sudo su user -c $ FOO"

    Как отключить предупреждение о внешних ссылках в Kmail?

    Передача параметров автозапуска в FreeBSD

    Linux для недорогого оборудования и интернет-просмотра

    Linux и Unix - лучшая ОС в мире.