Вы можете использовать эффект trim
; например, trim 0 15
пропустит только первые 15 секунд аудио. Вы можете поставить его до или после silence
:
silence
, этот эффект "услышит" только 15 секунд и, возможно, выведет меньше, если из этих 15 секунд нужно убрать тишину. silence
, trim
будет "слышать" звук с уже удаленной тишиной и остановится после 15 секунд отсутствия тишины. Если у вас есть файлы, которые являются текстовыми файлами DOS, а некоторые являются текстовыми файлами Unix, ваш сценарий может передавать все данные черезdos2unix
:
dos2unix <filename |
while IFS= read stuff; do
# do things with "$stuff"
done
Текстовые файлы Unix при этом не изменятся.
Чтобы дополнительно справляться с разрывами строк Mac, я считаю, что вы должны уметь
dos2unix <filename | mac2unix |
while IFS= read stuff; do
# do things with "$stuff"
done
Последняя строка не выводится вашим циклом read
, так как он не завершается и, следовательно, вообще не является строкой.
Чтобы определить, нет ли в файле завершающей новой строки в последней строке, и добавить ее, если нет, вbash
:
if [ "$( tail -c 1 filename )" != $'\n' ]; then
printf '\n' >>filename
fi
Связанные:
Для этого существуют явные инструменты. более распространенный, который можно использовать для удаления \r\n
из файлов, называется dos2unix
.
Если это недоступно в вашей системе, вы можете использовать одну из следующих команд, чтобы сделать что-то подобное с вашей textFileLines
переменной:
$ echo "$textFileLines" | awk 1 RS='\r\n' ORS=
Сед 1 $ echo "$textFileLines" | sed -e 's/\r//g'
Сед 2 $ echo $textFileLines | sed $'s/\r//'
тр $ echo "$textFileLines" | tr -d '\r'
Конечно, есть много других способов сделать это, это лишь некоторые из наиболее распространенных.
Выполнить:
$ [ -n "$(tail -c1 infile)" ] && echo >> infile
$ sed 's/\r$\|^\r//g;s/\r/\n/g' infile | while IFS= read -r line
> do echo "$line" ; done
DOS line
second DOS
old mac line
new mac line
end\n\rreverse
linux line
new linux line
Все проблемы решены.
Описание:
Чтобы исправить отсутствие последней новой строки, используйте:
[ -n "$(tail -c1 infile)" ] && echo >> infile
Что добавит завершающую новую строку только в случае необходимости (не изменит правильный файл ).
Затем вы можете преобразовать
\r\n
(Стиль DOS )-\n
(просто удалите \r в конце строки)\n\r
(недопустимый стиль DOS? )на один\n
(удалить \r в начале строки)\r
(старый MAC-адрес )в\n
всего за один вызов (GNU )sed с:
sed 's/\r$\|^\r//g;s/\r/\n/g' infile
Если текстовый файл похож на этот тестовый файл:
$ cat infile
DOS line
second DOS
new mac line
end\n\rreverse
linux line
new linux line
no end line
$ cat -A infile
DOS line^M$
second DOS^M$
old mac line^Mnew mac line$
end\n\rreverse$
^Mlinux line$
new linux line$
no end line
$ od -An -tc infile
D O S l i n e \r \n
s e c o n d D O S \r \n
o l d m a c l i n e \r
n e w m a c l i n e \n
e n d \ n \ r r e v e r s e \n \r
l i n u x l i n e \n
n e w l i n u x l i n e \n
n o e n d l i n e