假设你已经有了两个文件file1.txt和file2.txt,内容如下:
需要将4、5列相加,其余列保持不变。
file1.txt:
Gbar_A01 505 + 0 0 A CGC
Gbar_A01 506 - 0 0 A CGA
Gbar_A01 507 + 0 0 A CTT
Gbar_A01 511 + 0 0 A CGC
Gbar_A01 512 - 0 0 A CGA
Gbar_A01 513 + 0 0 A CTT
file2.txt:
Gbar_A01 505 + 1 2 A CGC
Gbar_A01 506 - 3 4 A CGA
Gbar_A01 507 + 5 6 A CTT
Gbar_A01 511 + 7 8 A CGC
Gbar_A01 512 - 9 10 A CGA
Gbar_A01 513 + 11 12 A CTT
如果两个文件非常大,使用perl等编程语言处理会非常慢,而且容易出错。
可以使用Linux 中的paste和awk处理:
命令如下:
paste file1.txt file2.txt | awk 'BEGIN {OFS="\t"} {print $1, $2, $3, $4 + $11, $5 + $12, $6, $7}' > result.txt
使用paste命令将两个文件合并,再使用awk命令计算第4列和第5列的和,并保持其他列不变,输出以tab键分隔:
awk命令解读:
BEGIN {OFS="\t"}:在awk脚本开始时,设置输出字段分隔符(OFS)为tab键。
{print $1, $2, $3, $4 + $11, $5 + $12, $6, $7}:打印合并文件中的第1、2、3列(来自file1.txt),第4列和第11列的和,第5列和第12列的和,第6列和第7列(来自file1.txt)。
结果保存在result.txt中,列之间以tab键分隔。
以下是执行上述命令后生成的result.txt内容:
Gbar_A01505+12ACGC
Gbar_A01506-34ACGA
Gbar_A01507+56ACTT
Gbar_A01511+78ACGC
Gbar_A01512-910ACGA
Gbar_A01513+1112ACTT
这样就能将两个文件的第4列和第5列分别相加,并且输出文件以tab键分隔,其他列保持不变。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!