Обработка больших файлов CSV - PullRequest
0 голосов
/ 04 октября 2018

возможно, это может быть дубликат вопроса.Я много искал, но не нашел ответа.

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

Когда я взял ~ 3 секунды звука, для которого процесс, который я выполняю, занимает около 5 минут, но при увеличении длины звука время, необходимое для завершения процесса, становится намного выше.например, 5 минут аудио занимает около 14 часов.Сначала я создал CSV-файл, содержащий время (в секундах) и амплитуду, а затем принял пороговое значение, при котором амплитуда меньше, чем i , будет равна 0, а больше будет 1. Позже я проверю, является ли числопоследовательный 0 больше другого порога j , затем занял время этой позиции.Следовательно, я нашел время окончания предложения.Этот процесс занимает слишком много времени, поэтому любые другие методы будут полезны.

Мой набор данных выглядит следующим образом:

1.000000000000000000e+00,0.000000000000000000e+00,6.103515625000000000e+01
2.000000000000000000e+00,2.267999999999999969e-05,3.051757811999999959e+01
3.000000000000000000e+00,4.534999999999999779e-05,0.000000000000000000e+00
4.000000000000000000e+00,6.802999999999999748e-05,3.051757811999999959e+01
5.000000000000000000e+00,9.069999999999999558e-05,3.051757811999999959e+01
6.000000000000000000e+00,1.133800000000000020e-04,0.000000000000000000e+00
7.000000000000000000e+00,1.360500000000000001e-04,0.000000000000000000e+00
8.000000000000000000e+00,1.587299999999999931e-04,0.000000000000000000e+00
9.000000000000000000e+00,1.814100000000000131e-04,0.000000000000000000e+00
1.000000000000000000e+01,2.040800000000000112e-04,0.000000000000000000e+00
1.100000000000000000e+01,2.267600000000000041e-04,0.000000000000000000e+00
1.200000000000000000e+01,2.494299999999999751e-04,3.051757811999999959e+01
1.300000000000000000e+01,2.721099999999999951e-04,0.000000000000000000e+00
1.400000000000000000e+01,2.947800000000000203e-04,0.000000000000000000e+00
1.500000000000000000e+01,3.174599999999999861e-04,0.000000000000000000e+00
1.600000000000000000e+01,3.401400000000000061e-04,3.051757811999999959e+01
1.700000000000000000e+01,3.628099999999999771e-04,0.000000000000000000e+00
1.800000000000000000e+01,3.854899999999999972e-04,3.051757811999999959e+01
1.900000000000000000e+01,4.081600000000000224e-04,0.000000000000000000e+00
2.000000000000000000e+01,4.308399999999999882e-04,0.000000000000000000e+00
2.100000000000000000e+01,4.535100000000000134e-04,3.051757811999999959e+01

Копируется из файла CSV.Количество строк 415449. Я дал вам только 20. Что мне нужно, это проверить, в первом столбце (1,2,3, ..., n) или нет.Когда серия разрывается, мне нужно взять значение столбца 2 на последнем номере серии.Надеюсь, я смогу решить свои проблемы

Обратите внимание: мне нужно сделать жесткий код в shell, python, C, C ++.

1 Ответ

0 голосов
/ 04 октября 2018

Теперь, когда я вас немного понял, используйте для этого awk:

awk -v n=6 '            # n as parameter
BEGIN { 
    FS=","              # comma as the field separator
} 
int($1)==$1 && $1<=n {  # if $1 is an integer less than or equal to n
    val=$2              # value of column 2 at the last number of series
}
END {
    print val           # output the value
}' file
1.133800000000000020e-04

Обновление :

$ awk -v i=1 -v j=0 -v k=3 '
BEGIN {
    FS=","
}
$3<i {        # if the value of 3rd column is less than "i" 
    j++       # then "j" will increment by 1
}
j>k {         # when the value of "j" is greater than a value "k" 
    print $1  # It will print the column 1 value
    # exit    # uncomment this if it only needs to print one value
}' file
8.000000000000000000e+00
9.000000000000000000e+00
1.000000000000000000e+01
1.100000000000000000e+01
1.200000000000000000e+01
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...