我想成对比较一组单词(个体),并提取出具有最小数值变量的单词。我的文件和脚本就是这样制作的。
相关度_第三度. txt(示例):
Individual1 Individual2
Individual5 Individual23
Individual50 Individual65
filename.imiss
INDV N_DATA N_GENOTYPES_FILTERED N_MISS F_MISS
Individual1 375029 0 782 0.00208517
Individual2 375029 0 341 0.000909263
Individual3 375029 0 341 0.000909263
主脚本:
numlines=$(wc -l Relatedness_3rdDegree.txt|awk '{print $1}')
for line in `seq 1 $numlines`
do
ind1=$(sed -n "${line}p" Relatedness_3rdDegree.txt|awk '{print $1}')
ind2=$(sed -n "${line}p" Relatedness_3rdDegree.txt|awk '{print $2}')
miss1=$(grep $ind1 filename.imiss|awk '{print $5}')
miss2=$(grep $ind2 filename.imiss|awk '{print $5}')
if echo "$miss1 > $miss2" | bc -l | grep -q 1
then
echo $ind1 >> miss.txt
else
echo $ind2 >> miss.txt
fi
echo "$line / $numlines"
done
这最后一个脚本将回显一系列这样的行:
等等,直到出现以下错误:
91 / 208
(standard_in) 1: syntax error
92 / 208
(standard_in) 1: syntax error
93 / 208
如果我转到输出(miss.txt),打印的个体是不正确的。它应该打印包含在文件“Relatedness_3rdDegree.txt”中的对中的个体,这些个体具有最小的F_MISS值(“filename.imiss”的列$5)。
例如,在“Individual1 Individual2”对中,它应该比较它们的F_MISS值,并且只打印具有最小值的个体,在本例中为个体2。
我已经手动检查了值和打印的个体,看起来它打印了每对随机个体。
这个脚本有什么问题?
1条答案
按热度按时间6jjcrrmo1#
Bash版本:
运行 * 如下:
AWK版本:
运行 * 如下:
这两个脚本使用关联数组以完全相同的方式执行完全相同的操作。
chmod
设置了脚本文件可执行文件,并且该文件位于PATH
中,数据文件位于当前目录中。