tr
и sed
: Замените все символы новой строки хешами (выберите любой другой символ, которого нет в ваших матрицах, если у вас есть хеши), тогда двойные хеши будут быть символами новой строки и одиночными просто пробелами: (GNU sed
)
tr '\n' '#' <file | sed 's/##/\n/g;s/#/ /g'
POSIX sed
tr '\n' '#' <file | sed 's/##/\
/g;s/#/ /g'
Возможно, вы также захотите разбить файл на матрицу блоки - отдельный файл для каждого, затем объедините их заново. Обратите внимание, что это много операций чтения / записи, и их следует учитывать только в том случае, если другие решения выходят за рамки вашей оперативной памяти.
csplit -b%04d -f file file '/^$/' '{*}'
Т.е. разделить файл
на файлы с именами fileXXXX
с непрерывным целым числом XXXX
, в качестве маркера разделения использовать пустые строки '/ ^ $ /'
; делать на все случаи жизни '{*}'
. Теперь воссоедините файлы по частям с помощью сценария оболочки:
for f in file???? ; do
sed '/^$/d' $f | tr '\n' ' ' >> newmatrices
done
I.e. удалите пустые строки, которые мы использовали в качестве маркеров разделения раньше, затем tr
замените символы новой строки на пробелы и добавьте каждую строку в выходной файл newmatrices
.
Конечно, и разделение, и воссоединение можно поместить в один сценарий.
Обратите внимание, что мне неизвестно, используются ли csplit
разные стандарты в разных системах.