Перебирайте строки файла, файла раздела и классифицируйте каждый раздел

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

Иллюстрация для понимания процедуры:

segL segH | | [ 2 4 9 15 25 45 ... 99 ] 102 136 ... 206 

Позже, для файла с 10000 строк я хотел бы разделить файл на сегменты равной длины с нижней границей segL и segH=segL+segsize .
Просматривая файл, я хотел бы подсчитать количество целых чисел, удовлетворяющих следующему условию:
segL < integer =< segH . Затем это число должно храниться в переменной, уникально содержащей количество целых чисел только для этого самого сегмента!

Код

 segsize=100 segL=0 segH=100 blockcounter=0 segment1=0 segments2=0 #Go through input and partition it for i in {1..2} do while read p; do if [ $p -gt $segL ] && [ $p -le $segH ] then blockcounter=$(($blockcounter + 1)) fi done <$inputfile if [ "$i" -eq "1" ] then segment1=$blockcounter echo "segment1: $segment1" fi if [ "$i" -eq "2" ] then segment2=$blockcounter echo "segment2: $segment2" fi blockcounter=0 segL=$segH segH=$(($segL + $segsize)) done 

Прямо сейчас, в моем коде, я могу собирать данные только для 2-х сегментов – с моим файлом, в настоящее время содержащим более 200 целых чисел (2 * сегмента).

Вывод:

сегмент1: 27
segment2: 33

Для более крупных образцов мне нужна помощь для хранения данных до 100-120 сегментов с аналогичным выпуском, упомянутым выше.

Можете ли вы подумать об альтернативах для достижения того же выхода (2D-массив, как объект для хранения точек данных, например A(segment1|<count of integers>) ?

One Solution collect form web for “Перебирайте строки файла, файла раздела и классифицируйте каждый раздел”

Я не уверен, что правильно понимаю вашу проблему …

 #!/bin/bash segsize=100 segL=0 max=0 a=() while read p; do (( n = (p - segL - 1) / segsize )) if (( n + 1 > max )); then for ((i = max; i < n + 1; i++)) do a+=(0) done (( max = n + 1 )) fi (( a[n]++ )) done for ((i = 0; i < max; i++)); do echo "segment $((i+1)) ($((segsize*i)), $((segsize*(i+1)))] : ${a[$i]}" done 

Вход (каждый номер должен быть> 0):

 1 100 101 200 1000 1001 

Вывод:

 segment 1 (0, 100] : 2 segment 2 (100, 200] : 2 segment 3 (200, 300] : 0 segment 4 (300, 400] : 0 segment 5 (400, 500] : 0 segment 6 (500, 600] : 0 segment 7 (600, 700] : 0 segment 8 (700, 800] : 0 segment 9 (800, 900] : 0 segment 10 (900, 1000] : 1 segment 11 (1000, 1100] : 1 
  • Добавление переменных с кавычками и пробелом в bash
  • Поверните скрипт bash и php в распределяемый rpm
  • Помощь при проверке выполнения предыдущей команды
  • Скопировать содержимое одного скрипта в другой скрипт
  • Как выйти из скрипта в сеансе ssh?
  • Получите только размер смонтированной файловой системы
  • Проверка ввода до выполнения цикла «for»
  • Как пропустить невосприимчивый сервер
  • Выполнение нескольких команд в скрипте init.d
  • Включите дополнительные инструкции о том, как запускать файл в hashbang или в другом месте
  • Как заставить скрипт принимать несколько аргументов?
  • как обмениваться переменными среды между оболочками, такими как глобальные переменные, связанные с мастером pid?
  • Interesting Posts

    Переслать X11 через два туннеля SSH

    Какой особый символ может быть эхом расширяться до моей домашней папки?

    Bind – правильная обратная конфигурация

    Почему временная метка syslog не включает год?

    Перенос события ввода с веб-камеры на клавишу на клавиатуре

    Обучение Unix с видеоуроками

    Влияние компиляции из исходного кода на уже установленные приложения

    Как увеличить загрузку / использование CPU в Solaris 10 для тестирования nagios?

    Исправлена ​​синтаксис заданного фонового задания

    неуправляемые vps centos6.4 должны открыть порт 20/21

    Поддерживает ли Qubes OS поддержку дискретной графики?

    Как настроить команду времени для измерения прошедшего времени программы

    awk переменная как регулярное выражение

    Обрезать последние несколько видеокадров, используя только инструменты командной строки

    пакеты фильтров определенного процесса с использованием iptable

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