как вставить новую строку, если строка содержит более 60 символов

Переменные не расширяются в одинарных кавычках, они рассматриваются буквально.

Вместо этого используйте двойные кавычки:

sed -i "s/WordToReplace/$the_word/g" thefile.sh
5
13.05.2019, 23:18
4 ответа

Попробуйте:

$ awk '{print $1; for (i=1;i<=length($2);i=i+60) print substr($2,i,60)}' file
>Directory1/file3
CTTSCCCTTTTTSEEEEECGGGSCEEEEECCCSSBCCCSCCCCCTTTCCCCCCCCSCBCC
CCCCCCSCTTSCCCTTTTTSEEEEECGGGSCEEEEECCCSSBCCCSCCCCCTTTCCCCCC
CCSCBCCCCCCCCSCTTSCCCTTTTTSEEEEECGGGSCEEEEECCCSSBCCCSCCCCCTT
TCCCCCCCCSCBCCCCCCCCS
>Directory1/file4
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAA

Как это работает:

  1. print $1

    Печатает первое поле в строке.

  2. for (i=1;i<=length($2);i=i+60) print substr($2,i,60)

    Для второго поля в строке мы печатаем по 60 символов за раз, пока не достигнем конца поля.

7
27.01.2020, 20:34

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

fold -w60 file
3
27.01.2020, 20:34

это тоже выглядит нормально

sed -E "s/^(>[^\s]+) /\1\n/; s/([[:alnum:]]{60})/\1\n/g" /path/file

результат

$ sed -E "s/^>([^\s]+) /\1\n/; s/([[:alnum:]]{60})/\1\n/g" /path/file
>Directory1/file3
CTTSCCCTTTTTSEEEEECGGGSCEEEEECCCSSBCCCSCCCCCTTTCCCCCCCCSCBCC
CCCCCCSCTTSCCCTTTTTSEEEEECGGGSCEEEEECCCSSBCCCSCCCCCTTTCCCCCC
CCSCBCCCCCCCCSCTTSCCCTTTTTSEEEEECGGGSCEEEEECCCSSBCCCSCCCCCTT
TCCCCCCCCSCBCCCCCCCCS
>Directory1/file4
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAA
...
...
1
27.01.2020, 20:34

это работает:

fold -s -w 60

Выдает тот же результат, что и в вопросе.

Предполагая, что во второй части нет пробелов, это самый простой способ сделать это.

0
27.01.2020, 20:34

Теги

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