Я бледный для удаления Возврата Управления и строк слияния в одном текстовом файле и предельном количестве символов
input.txt, содержащий:
comment 1
comment 2
...
comment n
output.txt должен каждый представлять в виде строки:
comment 1 comment 2 ... commnet n
НО ouput.txt должен быть ограничен т.е. 32 из символов:
comment 1 comment 2 comment 3 co
Я еще могу использовать sed, awk TR или что-то?
head -c 32 input.txt | tr '\n' ' ' > output.txt
head -c 32
отбрасывания все кроме первых 32 байтов.
tr '\n' ' '
замены все символы новой строки с пробелами.
, Если Вы хотите ограничить символы вместо байты в случае многобайтовых кодировок символов, можно использовать grep
вместо этого:
tr '\n' ' ' < input.txt | grep -oEe '^.{,32}' > output.txt
Awk должен быть прекрасным. Один путь:
$ echo -n "comment 1\rcomment 2\r...\rcomment n\r" > input.txt
$ cat input.txt | awk -v FS="" -v RS="" '{for (i=1;i<=32;i++) printf ($i == "\r")? "" : $i}' > output.txt
$ cat output.txt
comment 1comment 2...comment
Объяснение: по умолчанию вход процессов awk линию за линией, с одной строкой, названной запись ; каждая строка обработала столбец столбцом с отдельным столбцом, названным поле . Каждый поле отнесено переменными, запускающимися с 1, например, 1$, 2$, 3$ †¦
, Таким образом, Вы изменяете поведение по умолчанию установкой F ield S eparator к ""
, заставляя awk обрабатывать познаковый материал. Затем Вы устанавливаете Record Separator на ""
, таким образом, можно обратиться к символам всего текста сразу (т.е. не пишущий код для обработки материала линию за линией) .
Наконец, можно легко воздействовать на символы, таким образом, Вы циклично выполняетесь по полям (т.е. символы) и печатаете только, когда символ не является возвратом каретки.
tr '\n' ' ' < in.txt | cut -c -32
tr '\n' ' '
: удалите новые строки из входного текста cut -c -32
: ограничьте вывод 32 символами