Linux命令处理文件合并

Linux命令处理文件合并

假设你已经有了两个文件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键分隔,其他列保持不变。




  • 发表于 2024-08-07 16:03
  • 阅读 ( 401 )
  • 分类:linux

0 条评论

请先 登录 后评论
安生水
安生水

347 篇文章

作家榜 »

  1. omicsgene 698 文章
  2. 安生水 347 文章
  3. Daitoue 167 文章
  4. 生物女学霸 120 文章
  5. xun 80 文章
  6. 红橙子 78 文章
  7. rzx 74 文章
  8. CORNERSTONE 72 文章