Я пробовал написать однострочник в awk для преобразования файла с двумя столбцами в файл с тремя столбцами.
т.е. имя chr и начальная позиция -> chr name & if (Start> 2000) then start -2000; else 0 & start position
Итак, я написал следующую команду.
for i in `ls *.startlist`; do
name=`basename $i .startlist`;
awk -vOFS="\t" '{for (i=1; i<= NF; i++) { if($2 < 2000) { print $1,0,$2} else {print $1,$2-2000,$2 } }}' $i >${name}_promoter.bed;
done
, но при этом каждая строка печатается дважды. Можете ли вы подсказать ошибку? а также предложите, есть ли у вас лучший и более быстрый способ сделать то же самое.
вы выполняете преобразование NF раз для каждой строки. Ваш ввод имеет два поля, поэтому он удваивает каждую строку вашего вывода.
Попробуйте полностью удалить цикл for и проверьте, соответствует ли результат желаемому.
Если входной файл имеет два столбца, в каждой записи есть два поля (NF равно 2), и цикл for выполняется для i = 1 и i = 2 и каждый раз вызывается печать.
'{for (i=1; i<= NF; i++) { if($2 < 2000) { print $1,0,$2} else {print $1,$2-2000,$2 } }}'
Просто удалите петлю.