read_counts转FPKM(基于gtf和read_counts文件)(exon)

大家可以看最新版https://blog.youkuaiyun.com/qq_26012913/article/details/111939262?spm=1001.2014.3001.5501
首先我们要把gtf文件中的exon抓取出来

grep "exon" genome.gtf > genome_exon.gtf

然后提取genome_exon.gtf文件中的gene的exon的长度和得到我们想要的gene的长度

python count_genelen_from_gft.py genome_exon.gtf gene.len

这其中count_genelen_from_gft.py的代码如下:

import sys,re
file1 = sys.argv[1]
file2 = sys.argv[2]
f1 = open(file1,'r')
f2 = open(file2,'w')
flag = "fuck"
exon = []
for i in f1:
        a = i.split("\"")
        if flag == a[-2]:
                pos = i.split("\t")
                exon.append(abs(int(pos[4])-int(pos[3]))+1)
        elif flag == "fuck":
                flag = a[-2]
                pos = i
<think>我们只需要将原命令的输出重定向到文件即可。有两种常见方式: 1. 在整条命令的最后添加重定向:`> ip_counts.log` 2. 使用tee命令同时输出到屏幕文件(如果同时需要查看保存) 根据用户需求,只需要保存到文件,所以采用第一种方式。 因此,完整命令为: grep -E '192\.168\.1\.(10[0-9]|110)' log.log | awk '{ count[$1]++ } END { for (ip in count) print ip, count[ip] }' > ip_counts.log 注意:如果希望追加到文件而不是覆盖,则使用 `>> ip_counts.log`。 另外,如果希望同时输出到屏幕文件,可以使用tee命令: grep ... | awk ... | tee ip_counts.log 但是用户没有要求同时输出到屏幕,所以用第一种即可。 解释重定向: - `>` 表示覆盖写入文件(如果文件存在则覆盖,不存在则创建) - `>>` 表示追加写入文件(如果文件不存在则创建) 因此,根据需求选择覆盖或追加。 由于用户没有说明是覆盖还是追加,通常默认使用覆盖写入(>)。 所以最终命令: grep -E '192\.168\.1\.(10[0-9]|110)' log.log | awk '{ count[$1]++ } END { for (ip in count) print ip, count[ip] }' > ip_counts.log 如果log.log文件很大,这个命令可能需要一些时间运行,但最终结果会保存在ip_counts.log中。 另外,如果希望输出的文件内容按照某种顺序排序(例如按IP或按次),可以在awk命令内部进行排序,或者通过管道将awk的输出传递给sort命令。但是用户没有要求排序,所以按照原样保存。 如果希望排序,比如按IP地址排序,可以修改为: grep ... | awk ... | sort -n -t . -k1,1 -k2,2 -k3,3 -k4,4 > ip_counts.log 但是这样会增加复杂度,且用户未要求,所以不添加。 或者按次降序排序(次多的在前): grep ... | awk ... | sort -k2 -nr > ip_counts.log 但原问题没有要求排序,所以只做重定向。 因此,按照用户要求,只保存到文件,不改变输出顺序(注意:awk输出的顺序是随机的,因为关联组遍历顺序不确定)。如果需要按IP顺序或次顺序,应该排序。 考虑到用户可能需要按次排序(常见需求),我们可以提供两种选择: 选择1(原顺序,随机): 命令: ... > ip_counts.log 选择2(按次降序): 命令: ... | sort -k2 -nr > ip_counts.log 选择3(按IP升序): 命令: ... | sort -n -t . -k1,1 -k2,2 -k3,3 -k4,4 > ip_counts.log 由于用户没有明确,我们提供最基础的保存方式(即原命令输出顺序),但说明随机性,并给出排序建议。 但是,在awk中我们也可以排序,不过这样写起来复杂,所以用管道sort更简单。 由于原问题只要求保存,所以我们可以先按原命令保存,然后如果用户需要排序再调整。 因此,回答中我们将提供基础命令,并说明排序选项。 步骤: 1. 基础命令(保存随机顺序) 2. 可选:按次降序保存 3. 可选:按IP地址升序保存 用户可以根据需要选择。 但用户问题只要求保存,所以我们先给出基础命令,再提供可选排序。 总结: 基础命令: grep -E '192\.168\.1\.(10[0-9]|110)' log.log | awk '{ count[$1]++ } END { for (ip in count) print ip, count[ip] }' > ip_counts.log 可选(按次降序): grep -E '192\.168\.1\.(10[0-9]|110)' log.log | awk '{ count[$1]++ } END { for (ip in count) print ip, count[ip] }' | sort -k2 -nr > ip_counts.log 可选(按IP升序): grep -E '192\.168\.1\.(10[0-9]|110)' log.log | awk '{ count[$1]++ } END { for (ip in count) print ip, count[ip] }' | sort -n -t '.' -k1,1 -k2,2 -k3,3 -k4,4 > ip_counts.log 注意:sort命令中,-n表示按值排序,-t '.'指定分隔符为点,-k1,1表示第一段,以此类推。 由于IP地址是点分十进制,按值分段排序更准确。 但是,用户可能只需要基础命令,所以我们先回答基础命令。 另外,如果log.log文件路径当前路径不一致,请确保路径正确。 最终,我们给出基础命令,并说明其他排序选项。</think>要将命令的输出结果保存到文件 `ip_counts.log` 中,只需在命令末尾添加输出重定向操作符 `>`。以下是完整命令: ```bash grep -E '192\.168\.1\.(10[0-9]|110)' log.log | awk '{ count[$1]++ } END { for (ip in count) print ip, count[ip] }' > ip_counts.log ``` ### 关键说明: 1. **`>` 操作符** 将命令的标准输出重定向到文件,覆盖原有内容(若文件已存在) - 示例:`command > file` → 覆盖写入 - 若需追加内容,改用 `>>`:`command >> file` 2. **执行效果** - 屏幕不再显示统计结果 - 所有输出内容将写入 `ip_counts.log` - 文件内容格式示例: ``` 192.168.1.100 15 192.168.1.101 22 192.168.1.110 8 ``` 3. **验证结果** 使用以下命令检查文件内容: ```bash cat ip_counts.log # 查看完整内容 head ip_counts.log # 查看前10行 ``` ### 高级选项: 如果需要**同时显示结果并保存到文件**,使用 `tee` 命令: ```bash grep -E '192\.168\.1\.(10[0-9]|110)' log.log | awk '{ count[$1]++ } END { for (ip in count) print ip, count[ip] }' | tee ip_counts.log ``` ### 注意事项: - 确保对目标目录有写权限 - 文件路径可以是相对路径(如 `./ip_counts.log`)或绝对路径(如 `/var/log/ip_counts.log`) - 大文件处理时,添加 `sort` 命令优化输出排序(如按次降序): ```bash ... | sort -k2 -nr > ip_counts.log ``` > 引用说明:输出重定向是 Linux 基础操作[^3],`tee` 命令可实现双路输出[^4]。 --- ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值