मैं निम्नलिखित के साथ प्रतिशत का परिणाम प्राप्त करने का प्रयास कर रहा हूं;

for FNAME in *_1.fq
do
FILE=${FNAME##*/}
SAMPLE=${FILE%_1.fq}
echo "processing ${SAMPLE}"
let "Raw_reads = $((`cat ${SAMPLE}_1.fq | wc -l` / 4)) + $((`cat ${SAMPLE}_2.fq | wc -l` / 4))"
let "Error_corrected = $((`cat unfixrm_${SAMPLE}_1.cor.fq | wc -l` / 4)) + $((`cat unfixrm_${SAMPLE}_2.cor.fq | wc -l` / 4))"
let "Error_corrected_per = ($Error_corrected / $Raw_reads) * 100"
echo -e "$SAMPLE\t$Raw_reads\t$Error_corrected($Error_corrected_per%)"
done

मुझे यह परिणाम मिलता है; मैं कैसे प्राप्त करूं (४४%) और (२०%)

processing FB_0d
FB_0d   100     44(0%)
processing FB_2d
FB_2d   200     40(0%)
0
alex kiarie 17 नवम्बर 2020, 09:40

1 उत्तर

सबसे बढ़िया उत्तर

चूंकि, यानी, 44/200 पूर्णांक अंकगणित में 0 के बराबर है, और 0 को किसी भी चीज़ से गुणा करने पर भी 0 प्राप्त होता है, मैं निम्नलिखित विकल्पों का सुझाव देता हूँ:

या तो अपने फॉर्मूले में पहले १०० से गुणा करें और आखिरी भाग करें, यानी।

((Error_corrected_per = (Error_corrected * 100) / Raw_reads))

एक और संभावना (यदि यह आपके लिए एक विकल्प है) अपने प्रोग्राम को फिर से लिखना होगा, उदाहरण के लिए, बैश के बजाय zsh, जहां आपके पास फ़्लोटिंग पॉइंट अंकगणित है।

1
user1934428 17 नवम्बर 2020, 07:28