Добавьте разрыв строки в каждом фиксированном номере байта - PullRequest
0 голосов
/ 23 ноября 2018

Я использую AIX и ksh.

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

Например, если размер файла равен 123456789000, файл должен содержать 123456789 записей по 1000 байт.

Поскольку отсутствует строкаbreak char, т.е. LF, очень трудно обработать этот файл.

Я пробовал команду dd, используя bs = 1000.Но, похоже, нельзя добавить \ n после каждого блока.

Использование команды split может разбить файл на 123456789 файлов, каждый размером 1000 байт.Это большая проблема, чтобы продолжить.

Есть ли способ добавить \ n каждые 1000 байт?

Если я могу добавить \ n каждые 1000 байт, будет прощедля меня, чтобы обработать файл.

Кстати, я предпочитаю использовать скрипт ksh, без python, без perl.нет компилятора C.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Не очень элегантно, но работает в AIX:

#!/bin/sh

while dd bs=1000 count=1 2>ddstat.tmp; head -n1 ddstat.tmp |\
      grep -v -q '^0+0 records in'; do
    printf '\n'
done <split.in >split.out

Редактировать: версия без временного файла 'ddstat.tmp':

#!/bin/sh

exec 4>split.out

while dd bs=1000 count=1 2>&1 >&4 | head -n1 |\
      grep -v -q '^0+0 records in'; do
    printf '\n' >&4
done <split.in
0 голосов
/ 07 декабря 2018

Вы можете использовать

fold -w 1000 inputfile > outputfile
0 голосов
/ 23 ноября 2018

Это большая линия.Вы можете попробовать это:

while IFS= read -rn 1000 chars || [[ -n $chars ]]; do 
    printf "%s\n" "$chars"
done < file.in > file.out

Я не удивлюсь, если вы получите ошибки.

...