Remove Control Возвращает и объединяет строки в один текстовый файл и ограничивает количество символов

Я хочу удалить строки управления Return и merge в одном текстовом файле и ограничить количество символов

input.txt, содержащих:

comment 1 comment 2 ... comment n

input.txt [ ! d2] должна быть одна строка:

comment 1 comment 2 ... commnet n

НО, ouput.txt должно быть ограничено, например, 32 символами:

comment 1 comment 2 comment 3 co

Могу ли я использовать sed, awk tr или somthing еще?

1
задан 10 September 2017 в 22:42

6 ответов

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
1
ответ дан 18 July 2018 в 07:06
tr '\n' ' ' < in.txt | cut -c -32 tr '\n' ' ': удалить новые строки из входного текста cut -c -32: ограничить вывод до 32 символов
0
ответ дан 18 July 2018 в 07:06

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 ...

Таким образом, вы меняете поведение по умолчанию, устанавливая полевой разделитель на "", заставляя awk обрабатывать материал по символу. Затем вы установите Сепаратор записи на "", чтобы вы могли сразу ссылаться на символы всего текста record .

Наконец, вы можете легко работать с символами, поэтому вы переходите через поля (т. е. символы) и печатать только тогда, когда символ не является возвратом каретки.

0
ответ дан 18 July 2018 в 07:06
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
1
ответ дан 24 July 2018 в 18:44
tr '\n' ' ' < in.txt | cut -c -32 tr '\n' ' ': удалить новые строки из входного текста cut -c -32: ограничить вывод до 32 символов
0
ответ дан 24 July 2018 в 18:44

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 ...

Таким образом, вы меняете поведение по умолчанию, устанавливая полевой разделитель на "", заставляя awk обрабатывать материал по символу. Затем вы установите Сепаратор записи на "", чтобы вы могли сразу ссылаться на символы всего текста record .

Наконец, вы можете легко работать с символами, поэтому вы переходите через поля (т. е. символы) и печатать только тогда, когда символ не является возвратом каретки.

0
ответ дан 24 July 2018 в 18:44
  • 1
    Почему все эти символы возврата каретки (\r) на входе? Escape-последовательность для символов новой строки - \n. – David Foerster 10 September 2017 в 14:51
  • 2
    @DavidFoerster OP попросил вернуть карету, идем почему. – Hi-Angel 10 September 2017 в 14:52
  • 3
    Хм ... ты прав. Но я думаю, что они на самом деле означали символы прерывания строки / новой строки. – David Foerster 10 September 2017 в 14:52
  • 4
    @DavidFoerster хорошо, \r легко заменить на \n, так что это не большая проблема. Но FTR, мой оригинальный ответ использовал \n ☺ Но потом я заметил OP's & quot; Control Return & quot; с первыми буквами, подозрительно подобными CR, и быстро заменил его. Это изменение не сохраняется, потому что я сделал это в течение 5 минут. – Hi-Angel 10 September 2017 в 15:24

Другие вопросы по тегам:

Похожие вопросы: