【发布时间】:2014-09-15 22:24:38
【问题描述】:
我一直在尝试过滤一些我拥有很长时间的 csv 文件。几乎是手工完成的,因为我不知道为什么我的脚本不起作用。希望你们能弄清楚我做错了什么。
我有以下文件:csv file
我可以使用以下 sed 脚本替换小于 1 的值:
sed -e 's/[0][0-9]*\.[0-9]*/0/g' genes.csv > genes-filtered1.csv
在下一步中,我想删除所有全为零的行。但是,如果它们在至少一列中的值大于 1,我想保留。我尝试了几个脚本,但都不起作用。
以下是其中的一些:
awk '{ if ($2 > 1 || $3 > 1 || $4 > 1 || $5 > 1 || $6 > 1 || $7 > 1 || $8 > 1 || $9 > 1 || $10 > 1 || $11 > 1 || $12 > 1 || $13 > 1) print $0 }' genes-filtered1.csv > genes-filtered2.csv
或者只是尝试使用阈值按一列过滤:
threshold=1
awk -v threshold=$threshold '$3 > threshold' genes-filtered1.csv > genes-filtered2.csv
我也试过了:
awk '{ for (i=2; i<=NF; i++) { if ($i != 0) { print; next } } }' genes-filtered1.csv > genes-filtered2.csv
我终于尝试了:
awk '{for (i=2;i<=NF;i++) if ($i>=1){print $0;next}}' genes-filtered1.csv > genes-filtered2.csv
问题是输出文件要么是空的,要么与原始文件相同。任何如何解决它的建议将不胜感激。还有可能有一个 awk 命令来做我正在用 sed 做的事情,然后删除全零的行吗? 谢谢
【问题讨论】: