shell代码过滤数据,运行时总是报错
现有数据如下图,一共有5个样本,每个样本又包括cov和met两项,position这一列是所有样本共用的,有些数据没有,所以用NA表示,现在要对这个数据进行过滤,要求是①最多只能有3个样本(也就是6列)出现NA,否则就过滤掉
②每个样本的met相加求平均值,平均值>5则过滤
通过上述两个条件的被保留下来
我的代码如下:
#!/bin/bash
for line in `cat 1.csv`
do
declare -i na_num
declare -i not_na_num
na_num=$(echo $line|awk -F "," '{for(i=1;i<=NF;++i) if($i=="NA") ++num}END{print num}')
sum=$(echo $line|awk -F "," '{for(i=4;i<=NF;i+=2) if($i!="NA") sum+=$i}END{print sum}')
not_na_num=$(echo $line|awk -F',' '{for(i=4;i<=NF;i+=2) if($i!="NA") ++sum_1}END{print num_1}')
avg=`echo "$sum/$not_na_num"|bc`
if [ $na_num -le 6 ] && [ `echo "$avg <= 5"|bc` -eq 1 ];then
echo $line >> test_filter.csv
fi
done
由于表格里的数据既有整型又有浮点型,所以计算的时候很麻烦,有没有高手帮忙看看这个代码有哪些地方错了(或者很多都是错的) 运行时总是说有0,另外请问我这样能够成功的一行一行读取文件吗 先清除 1.csv 中的空格,才能一行一行读到 geekchina 发表于 2018-1-25 23:36
先清除 1.csv 中的空格,才能一行一行读到
用less查看文件,里面并没有空格啊
页:
[1]