Обрежьте линии до определенной длины

Обрежьте линии до определенной длины

У меня есть файл со множеством строк, и я хочу обрезать каждую строку до 80 символов в длину. Как это сделать?

Я уже отфильтровал строки короче 80 символов, так что теперь у меня остался файл, содержащий строки длиной 80+ символов, и я хочу обрезать каждую строку так, чтобы все они были ровно 80. Другими словами, я хочу сохранить первые 80 символов в каждой строке и удалить остальную часть строки.

решение1

Вы можете использовать cutкоманду:

cut -c -80 file

С grep:

grep -Eo '.{80}' file

решение2

С использованиемАВК:

awk '{print substr($0,1,80)}' file.txt

С использованиемрезать:

 cut -c -80 file.txt

С использованиемцвет:

colrm 81 file.txt

С использованиемсэд:

sed 's/^\(.\{80\}\).*$/\1/' file.txt

С использованиемгрэп:

grep -Eo '.{80}' file.txt

решение3

Чтобы вырезать (обрезать) каждую строку файла (и вывести результат в текущую консоль), используйте:

cut -c -80 infile               # cut only counts bytes (fail with utf8)
grep -o '^.\{1,80\}' infile
sed 's/\(^.\{1,80\}\).*/\1/' infile

Если вы хотите вставить новую строку после 80-го символа и разбить каждую строку длиннее 80 символов на большее количество строк, используйте:

fold -w 80 infile            # fold, like cut, counts bytes.

Если вы хотите разделить только пробелы (целые слова), используйте:

fold -sw 80 infile

Для всех приведенных выше решений перенаправьте в какой-либо другой файл, например >outfile(не используйте то же имя, это не сработает) в конце любой команды, чтобы сохранить результат в outfile. Пример:

fold -sw 80 infile > outfile

решение4

Использование Raku (ранее Perl6)

~$ raku -ne 'put ~$0 if m/ ^^(. ** 80) /;'

ВЫХОД:

the of and to in a is that for it as was with be by on not he i this are or his
the of and to in a is that for it as was with be by on not he i this are or his
the of and to in a is that for it as was with be by on not he i this are or his
the of and to in a is that for it as was with be by on not he i this are or his
[TRUNCATED]

Код выше возвращает первые 80 символов строки ( ^^утверждение нулевой ширины означает «начало строки»). Если строка слишком короткая, ничего не возвращается. Чтобы вернутьВПЛОТЬ ДО80 символов, используйте форму ** 1..80.

Нумерация захватов начинается с $0. Получите считывание количества возвращенных символов, добавив .charsк ~$0переменной захвата:

~$ raku -ne 'put ~$0.chars if m/ ^^(. ** 80) /;' ~/top50.txt
80
80
80
80
[TRUNCATED]

НТН.

https://raku.org

Связанный контент