不二不幸福 发表于 2018-1-25 11:07:47

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
由于表格里的数据既有整型又有浮点型,所以计算的时候很麻烦,有没有高手帮忙看看这个代码有哪些地方错了(或者很多都是错的)

不二不幸福 发表于 2018-1-25 13:46:26

运行时总是说有0,另外请问我这样能够成功的一行一行读取文件吗

geekchina 发表于 2018-1-25 23:36:16

先清除 1.csv 中的空格,才能一行一行读到

不二不幸福 发表于 2018-1-26 09:50:43

geekchina 发表于 2018-1-25 23:36
先清除 1.csv 中的空格,才能一行一行读到

用less查看文件,里面并没有空格啊
页: [1]
查看完整版本: shell代码过滤数据,运行时总是报错