나는 엄격한 형식의 텍스트이고 DNA에 대한 일부 정보를 포함하는 .fasta 파일을 가지고 있습니다. 일반적인 구조는 다음과 같습니다.
>NODE_18_length_75451_cov_83.3021
TGAACCGCTTGCCAAATATTTTCCGTCCGGACTTACGGCAACGGAAAGGAC
>NODE_3_length_175235_cov_84.0427
ACATGCAATGTTTATAGTCCTTGTATCAGAGACTCTATCAACGCTCTCGG
짝수 줄에는 DNA 서열이 있고, 홀수 줄에는 그 서열에 대한 정보가 있습니다. 이 시나리오는 단일 텍스트 파일에서 최소 10,000줄에 대해 반복됩니다. 각 줄에서 "cov_" 다음의 값을 가져와서 2를 곱하고 새 파일에 인쇄하는 방법을 찾아야 합니다. 새 파일에는 다음 구성표가 있어야 합니다(모든 행에 대해).
>NODE_18 cov_166.60
DNA seq: TGAACCGCTTGCCAAATATTTTCCGTCCGGACTTACGGCAACGGAAAGGAC
>NODE_3 cov_168.04
DNA seq: ACATGCAATGTTTATAGTCCTTGTATCAGAGACTCTATCAACGCTCTCGG
답변1
이 작업을 수행하기 위해 실제로 셸을 사용하려면 산술 연산을 다른 명령으로 전달할 수 있습니다 bc
. 예를 들면 다음과 같습니다.
while read odd ; do
echo -n "cov_" ; echo "2*${odd##*_}" | bc -q
read even
echo "DNA seq: $even"
done < input.fasta
답변2
배쉬를 사용하시나요? 거기 가지 마세요. 텍스트 처리 언어가 아닙니다. awk를 사용하세요:
awk -F_ '/^>/ {printf "%s_%s cov_%.2f\n", $1, $2, $6 * 2; next} {print "DNA seq:", $0}' file.fasta
>NODE_18 cov_166.60
DNA seq: TGAACCGCTTGCCAAATATTTTCCGTCCGGACTTACGGCAACGGAAAGGAC
>NODE_3 cov_168.09
DNA seq: ACATGCAATGTTTATAGTCCTTGTATCAGAGACTCTATCAACGCTCTCGG