Как переместить части одной строки текста на другую?

В оболочке zshи любом средстве просмотра изображений, которое будет отображать изображения в том порядке, в котором они заданы в командной строке, вы можете использовать квалификатор oLglob для сортировки расширения glob по размеру:

feh./*.jpg(oL) # from smallest to largest
feh./*.jpg(OL) # from largest to smallest
feh./*.jpg(^oL) # from largest to smallest
2
20.01.2021, 20:29
4 ответа

Использованиеsed:

sed -E '/^@/{ N; s/^(.*)#(.*)\/1(.*)/\1#\2\/1\3\2AGTCGGAGGC/; }' infile

если строка начиналась с @, то прочитайте Nдополнительную строку и захватите 3 группы, которые позже мы будем использовать, чтобы вернуть их обратно в соответствии с вашими требованиями к порядку, а также добавить 2AGTCGGAGGC.

0
18.03.2021, 22:35

Я предлагаю вам использовать комбинацию awk и seqkit . Следующая команда преобразует данные в файл, разделенный вкладкой -, которым легче манипулировать, а затем возвращает его обратно в fastq.

seqkit fx2tab text.fq | awk '{ tag=$1; gsub(/(^.*#)|(\/1$)/,"", tag); print $1 "\t" $2 tag "\t" $3 "FFFFFFFFFF"}' | seqkit tab2fx

После этого вы получите желаемый результат, включая расширение показателей качества с использованием phred+33 для поддержания правильного форматирования fastq:

@V300088128L1C001R0010000004#TCCTCGCATG/1
TTCAAGTAATCCAGGATAGGCTTCCTCGCATG
+
FFDFFFFFFFFGFFFFFFFFFFFFFFFFFFFF
@V300088128L1C001R0010000019#CTGATATAGA/1
GTGGATCACTTGGCTCGGGACTGATATAGA
+
F:FFFGF?FGGFFFFGFFEEFFFFFFFFFF

если ваши теги имеют переменный размер, вы можете использовать следующий вариант на основе кода, найденного здесь:

seqkit fx2tab text.fq | awk ' function str_repeat(s1, n1) {s2 = ""; for (n2 = 1; n2 <= n1; n2++) {s2 = s2 s1} return s2 }; {tag=$1; gsub(/(^.*#)|(\/1$)/,"", tag);  print $1 "\t" $2 tag "\t" $3 str_repeat("F", length(tag)) }'
0
18.03.2021, 22:35
$ cat tst.awk
str != "" { $0 = $0 str "AGTCGGAGGC"; str="" }
match($0,"#.*/") { str = substr($0,RSTART+1,RLENGTH-2) }
{ print }

$ awk -f tst.awk file
@V300088128L1C001R0010000004#TCCTCGCATG/1
TTCAAGTAATCCAGGATAGGCTTCCTCGCATGAGTCGGAGGC
+
FFDFFFFFFFFGFFFFFFFFFF
@V300088128L1C001R0010000019#CTGATATAGA/1
GTGGATCACTTGGCTCGGGACTGATATAGAAGTCGGAGGC
+
F:FFFGF?FGGFFFFGFFEE
1
18.03.2021, 22:35

Используя GNU sedс расширенным режимом регулярных выражений -E, мы прикрепляем следующую строку к строке @, если она не последняя. Затем мы берем текст между #и /1, а также помещаем \n в регулярное выражение, чтобы убедиться, что оно находится в строке @, и прикрепляем его к концу пространства шаблона.

sed -Ee '
  /@/{$!N;}
  s|#(.*)/1.*\n.*|&\1AGTCGGAGGC|
' file
0
18.03.2021, 22:35

Теги

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