Я не могу прокомментировать ответ, потому что мне не хватает репутации, но мой муж сделал это обновление на Precise, и он полностью закрыл свою систему, и ему пришлось сделать полную переустановку. Поэтому мой совет будет, если вы используете Precise 12.04, не делайте этого обновления. Мы потратили часы, пытаясь восстановить его систему из-за этого.
Было бы здорово, если бы вместо простого размещения сообщения и кнопки установки в центре обновления они оставили ссылку, чтобы вы знали что это было.
Поскольку вы специально попросили решение sed (я бы не предлагал на самом деле делать это таким образом, но вы могли бы):
$ sed = file | sed '1~2 s/^/>seq/'
>seq1
CWGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAG
>seq2
ACACTCTTTCCCTACACGACGCTCTTCCGATCTAGGC
>seq3
ACACTCTTTCCCTACACGACGCTCTTCCGATCTGATT
>seq4
ACACTCTTTCCCTACACGACGCTCTTCCGATCTACCGT
Первый вызов sed = file вставляет номера голой строки, затем второй украсит их, добавив строку >seq.
OTOH, если вы заранее знаете, что есть 770 строк, тогда вы можете сделать
printf ">seq%d\n" {1..770} | sed 'R file'
, хотя это зависит от расширения GNU sed R:
R filename Очередь очереди имени файла для чтения и вставки в выходной поток в конце текущего цикла или при следующем входе строка читается. Обратите внимание, что если имя файла не может быть прочитано или если его конец достигнут, строка не добавляется, без каких-либо признаков ошибки.Конечно, если вы не знаете количество строк раньше времени, вы можете сделать
printf ">seq%d\n" $(seq 1 "$(wc -l < file)") | sed 'R file'
, но это потеряет преимущество только в том, что нужно только один раз прочитать файл .
На практике я, вероятно, использовал бы awk-решение @ John1024 или его эквивалент perl
perl -lpe 'print ">seq" . $.' file
Поскольку вы специально попросили решение sed (я бы не предлагал на самом деле делать это таким образом, но вы могли бы):
$ sed = file | sed '1~2 s/^/>seq/'
>seq1
CWGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAG
>seq2
ACACTCTTTCCCTACACGACGCTCTTCCGATCTAGGC
>seq3
ACACTCTTTCCCTACACGACGCTCTTCCGATCTGATT
>seq4
ACACTCTTTCCCTACACGACGCTCTTCCGATCTACCGT
Первый вызов sed = file вставляет номера голой строки, затем второй украсит их, добавив строку >seq.
OTOH, если вы заранее знаете, что есть 770 строк, тогда вы можете сделать
printf ">seq%d\n" {1..770} | sed 'R file'
, хотя это зависит от расширения GNU sed R:
R filename Очередь очереди имени файла для чтения и вставки в выходной поток в конце текущего цикла или при следующем входе строка читается. Обратите внимание, что если имя файла не может быть прочитано или если его конец достигнут, строка не добавляется, без каких-либо признаков ошибки.Конечно, если вы не знаете количество строк раньше времени, вы можете сделать
printf ">seq%d\n" $(seq 1 "$(wc -l < file)") | sed 'R file'
, но это потеряет преимущество только в том, что нужно только один раз прочитать файл .
На практике я, вероятно, использовал бы awk-решение @ John1024 или его эквивалент perl
perl -lpe 'print ">seq" . $.' file
Поскольку вы специально попросили решение sed (я бы не предлагал на самом деле делать это таким образом, но вы могли бы):
$ sed = file | sed '1~2 s/^/>seq/'
>seq1
CWGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAG
>seq2
ACACTCTTTCCCTACACGACGCTCTTCCGATCTAGGC
>seq3
ACACTCTTTCCCTACACGACGCTCTTCCGATCTGATT
>seq4
ACACTCTTTCCCTACACGACGCTCTTCCGATCTACCGT
Первый вызов sed = file вставляет номера голой строки, затем второй украсит их, добавив строку >seq.
OTOH, если вы заранее знаете, что есть 770 строк, тогда вы можете сделать
printf ">seq%d\n" {1..770} | sed 'R file'
, хотя это зависит от расширения GNU sed R:
R filename Очередь очереди имени файла для чтения и вставки в выходной поток в конце текущего цикла или при следующем входе строка читается. Обратите внимание, что если имя файла не может быть прочитано или если его конец достигнут, строка не добавляется, без каких-либо признаков ошибки.Конечно, если вы не знаете количество строк раньше времени, вы можете сделать
printf ">seq%d\n" $(seq 1 "$(wc -l < file)") | sed 'R file'
, но это потеряет преимущество только в том, что нужно только один раз прочитать файл .
На практике я, вероятно, использовал бы awk-решение @ John1024 или его эквивалент perl
perl -lpe 'print ">seq" . $.' file
Ваша задача может быть выполнена с помощью sed, но sed не имеет никакого естественного понимания арифметики, что делает ее неправильным инструментом. Awk хорошо работает:
$ awk '{print ">seq" NR} 1' file
>seq1
CWGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAG
>seq2
ACACTCTTTCCCTACACGACGCTCTTCCGATCTAGGC
>seq3
ACACTCTTTCCCTACACGACGCTCTTCCGATCTGATT
>seq4
ACACTCTTTCCCTACACGACGCTCTTCCGATCTACCGT
Как это работает:
print ">seq" NR Для каждой новой строки, прочитанной, сначала напечатаем требуемый заголовок. NR - счетчик строк awk. 1 Это критическая стенограмма awk для печати.Использование простой петли:
count=1; while read -r line ; do printf '>seq%d\n%s\n' $((count++)) "$line"; done < file
Выход:
>seq1
CWGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAG
>seq2
ACACTCTTTCCCTACACGACGCTCTTCCGATCTAGGC
>seq3
ACACTCTTTCCCTACACGACGCTCTTCCGATCTGATT
>seq4
ACACTCTTTCCCTACACGACGCTCTTCCGATCTACCGT
Использование paste:
paste -d '\n' <(seq -f '>seq%g' 1 4) file
seq -f '>seq%g' 1 4 записывает номера, разделенные символом новой строки, в stdout & lt; (...) - подстановка процесса paste объединяет соответствующую строку каждого файла, разделенная по разделителю -d '\n' устанавливает разделитель конкатенации в новую строку вместо закладки по умолчанию Использование простой петли:
count=1; while read -r line ; do printf '>seq%d\n%s\n' $((count++)) "$line"; done < file
Выход:
>seq1
CWGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAG
>seq2
ACACTCTTTCCCTACACGACGCTCTTCCGATCTAGGC
>seq3
ACACTCTTTCCCTACACGACGCTCTTCCGATCTGATT
>seq4
ACACTCTTTCCCTACACGACGCTCTTCCGATCTACCGT
Использование paste:
paste -d '\n' <(seq -f '>seq%g' 1 4) file
seq -f '>seq%g' 1 4 записывает номера, разделенные символом новой строки, в stdout & lt; (...) - подстановка процесса paste объединяет соответствующую строку каждого файла, разделенная по разделителю -d '\n' устанавливает разделитель конкатенации в новую строку вместо закладки по умолчанию Ваша задача может быть выполнена с помощью sed, но sed не имеет никакого естественного понимания арифметики, что делает ее неправильным инструментом. Awk хорошо работает:
$ awk '{print ">seq" NR} 1' file
>seq1
CWGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAG
>seq2
ACACTCTTTCCCTACACGACGCTCTTCCGATCTAGGC
>seq3
ACACTCTTTCCCTACACGACGCTCTTCCGATCTGATT
>seq4
ACACTCTTTCCCTACACGACGCTCTTCCGATCTACCGT
Как это работает:
print ">seq" NR Для каждой новой строки, прочитанной, сначала напечатаем требуемый заголовок. NR - счетчик строк awk. 1 Это критическая стенограмма awk для печати.Использование простой петли:
count=1; while read -r line ; do printf '>seq%d\n%s\n' $((count++)) "$line"; done < file
Выход:
>seq1
CWGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAG
>seq2
ACACTCTTTCCCTACACGACGCTCTTCCGATCTAGGC
>seq3
ACACTCTTTCCCTACACGACGCTCTTCCGATCTGATT
>seq4
ACACTCTTTCCCTACACGACGCTCTTCCGATCTACCGT
Использование paste:
paste -d '\n' <(seq -f '>seq%g' 1 4) file
seq -f '>seq%g' 1 4 записывает номера, разделенные символом новой строки, в stdout & lt; (...) - подстановка процесса paste объединяет соответствующую строку каждого файла, разделенная по разделителю -d '\n' устанавливает разделитель конкатенации в новую строку вместо закладки по умолчанию Ваша задача может быть выполнена с помощью sed, но sed не имеет никакого естественного понимания арифметики, что делает ее неправильным инструментом. Awk хорошо работает:
$ awk '{print ">seq" NR} 1' file
>seq1
CWGAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAG
>seq2
ACACTCTTTCCCTACACGACGCTCTTCCGATCTAGGC
>seq3
ACACTCTTTCCCTACACGACGCTCTTCCGATCTGATT
>seq4
ACACTCTTTCCCTACACGACGCTCTTCCGATCTACCGT
Как это работает:
print ">seq" NR Для каждой новой строки, прочитанной, сначала напечатаем требуемый заголовок. NR - счетчик строк awk. 1 Это критическая стенограмма awk для печати.