Ниже приведен формат файла, с которым мне нужно иметь дело:
@HWI-ST150_0129:2:1:4226:2616#0/1
CATCTTTTCTCTTAACTTCCATGATGGTACATCTTTTGATTTTTTTTTAATAACGTCTTTGACAGCTTAAATTCTTTTTCAAAATC
+HWI-ST150_0129:2:1:4226:2616#0/1
d\dddddaddbcad^\^a\]ZZZ_`]\VYa_bZ^_^\YX\X`eeeeffffffefffeeefffefffeeffBBBBBBBBBBBBBBBB
В основном мне нужно сделать следующее:
1. выбрать каждую 4-ю строку; и обрежьте все возможные конечные "B" в конце строки.
2.Если левая часть составляет> 70% всей строки после обрезки, то: обрезать дубликат в каждой 2-й строке для последовательности "B" в 4-й строке.
3. Затем просто добавьте все 4 строки со второй и четвертой обрезкой.
Итак, ожидаемый результат выглядит следующим образом:
@HWI-ST150_0129:2:1:4226:2616#0/1
CATCTTTTCTCTTAACTTCCATGATGGTACATCTTTTGATTTTTTTTTAATAACGTCTTTGACAGCTTAA
+HWI-ST150_0129:2:1:4226:2616#0/1
d\dddddaddbcad^\^a\]ZZZ_`]\VYa_bZ^_^\YX\X`eeeeffffffefffeeefffefffeeff
И я написал скрипт вроде:
for((a=1;a<=8000000;a++))
do
if (($a%4==0))
then
b=`cat $FILENAME|head -$a|tail -1|sed 's/\(.\)B*$/\1/g'|wc -c`
d=`cat $FILENAME|head -$a|tail -1|wc -c`
if (( 10*$b/$d>= 7 ))
then
cat $FILENAME|head -$(($a-3))|tail -1
cat $FILENAME|head -$(($a-2))|tail -1|cut -b 1-$(($b-1))
cat $FILENAME|head -$(($a-1))|tail -1
cat $FILENAME|head -$a|tail -1|sed 's/\(.\)B*$/\1/g'
fi
fi
done >> /home/xxx/$DIRNAME/$FILENAME
Я думаю, что предпочитаю bash-код просто потому, что он быстрый (?). Тем не менее, когда я запускаю этот код, он медлит, думая о 8000000 строк. Кроме того, может быть, я слишком часто использовал "cat" в коде?
быстро, я имею в виду, скажем, при использовании команд разделения для разделения большого файла на уровне ГБ; это супер супер быстро. (Какой механизм раскола?)
Есть предложения по улучшению скорости?