Linux:在同一文件中连接具有相等值的两行

标签 linux join merge

我有一个如下所示的文件:

1 51 Brahui A C A A T
1 51 Brahui A C A G T
3 51 布拉惠 A C A G C
3 51 Brahui A C G A T
5 51 Brahui A C G A T
5 51 布拉惠 A C G G C
7 51 Brahui A C G A T
7 51 布拉惠 A C G G T
9 51 布拉惠 A C G G T
9 51 布拉惠 A C G G T

我想生成一个输出文件,如果第一列/字段具有相同的值,那么我想将这两行合并在一起,并以“/”字符作为分隔符。例如:

1 51 Brahui A/A C/C A/A A/G T/T
3 51 布拉惠 A/A C/C A/G G/A C/T

有什么办法可以做到这一点吗?

P.S.从 $4 开始的列实际上有 2,834 长(即 $4-$2841),所以我认为实际输入 $4、$5、$6 等不切实际。有没有办法做到这一点?

最佳答案

pearl.229>awk '{a=$1;
          b=$4;
          c=$5;
          d=$6;
          e=$7;
          f=$8;
          getline;
          if(a==$1)
          print a,$2,$3,b"/"$4,c"/"$5,d"/"$6,e"/"$7,f"/"$8}' file3
    1 51 Brahui A/A C/C A/A A/G T/T
    3 51 Brahui A/A C/C A/G G/A C/T
    5 51 Brahui A/A C/C G/G A/G T/C
    7 51 Brahui A/A C/C G/G A/G T/T
    9 51 Brahui A/A C/C G/G G/G T/T
    pearl.230>

关于Linux:在同一文件中连接具有相等值的两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9992215/

相关文章:

c++ - 将 "xxd -i"编码的C源代码转换为C源代码的脚本/工具?

postgresql - 带子查询的 postgres case 语句

mysql - 左连接两个 View 很慢?

Mysql - 将多个列合并为一列,同时保留每个值

c# - 如何绕过有关已删除目录的字符路径限制的 TFS 错误? ( Visual Studio 2013)

linux - 我如何破坏 openldap mdb 数据库?

linux - 如何显示启动时运行的脚本的终端?

python - 将两个元组合并为一个

linux - 如何将bash中的readkey包装在一个变量中

arrays - Perl 以不同的方式加入?