【问题标题】:Mixing several files column by column in bash在bash中逐列混合多个文件
【发布时间】:2016-05-06 23:30:57
【问题描述】:

我想将四个.txt 文件合并到一个唯一的文件中。但是,这个想法不是简单的串联,而是输入文件之间的“交错”,其中file1 将是前三列,files 2-4 必须按后续顺序逐列粘贴。因此我们有:

file1:

file1 <- '  AX-1   1    125    
            AX-2   2    456
            AX-3   3    3445'
file1 <- read.table(text=file1, header=F)
write.table(file1, "file1.txt", col.names=F, row.names=F, quote=F) 

file2:

file2 <- '  AX-1   AA  AB  AA    
            AX-2   AA  AA  AB
            AX-3   BB  NA  AB'
file2 <- read.table(text=file2, header=F)
write.table(file2, "file2.txt", col.names=F, row.names=F, quote=F)

file3:

file3 <- '  AX-1   0.20  -0.89  0.005    
            AX-2   0  -0.56  -0.003
            AX-3   1.2  0.002  0.005'
file3 <- read.table(text=file3, header=F)
write.table(file3, "file3.txt", col.names=F, row.names=F, quote=F)

file4:

file4 <- '  AX-1   1  0  0.56    
            AX-2   0  0.56  0
            AX-3   1  0  0.55'
file4 <- read.table(text=file34, header=F)
write.table(file4, "file4.txt", col.names=F, row.names=F, quote=F)

我预期的out 文件可能类似于:

out <- 'AX-1   1    125  AA  0.2  1 AB -0.89 0 AA 0.005 0.56
        AX-2   2    456  AA  0   0 AA -0.56 0.56 AB -0.003 0
        AX-3   3    3445  BB  1.2  1 NA  0.002 0 AA 0.005 0.55'
out <- read.table(text=out, header=F)
write.table(out, "out.txt", col.names=F, row.names=F, quote=F)

因此,在out 中:1-3 列是file14,7 and 10 列来自file25,8 and 11 列来自file36,9 and 12 列来自来自file4

我在R 有一个想法,但是我的原始文件太大,需要很多时间。如果有人知道如何直接在 bash 中执行它,我将不胜感激。

【问题讨论】:

  • 也许可以解释一下代码的作用,对于我们这些了解 Bash 但不了解 R 的人来说,

标签: bash text merge conditional concatenation


【解决方案1】:

这应该可行:

$ join a1 a2 | join - a3 | join - a4 | awk '{printf "%s %s %s %s %s %s %s %s %s %s %s %s\n", $1, $2, $3, $4, $7, $10, $5, $8, $11, $6, $9, $12}'
AX-1 1 125 AA 0.20 1 AB -0.89 0 AA 0.005 0.56
AX-2 2 456 AA 0 0 AA -0.56 0.56 AB -0.003 0
AX-3 3 3445 BB 1.2 1 NA 0.002 0 AB 0.005 0.55

【讨论】:

    【解决方案2】:

    试试这个:

     paste file1 file2 file3 file4 | awk '{ print $1 " " $2 " " $3 " " $5 " " $9 " " $13 " " $6 " " $10 " " $14 " " $7 " " $11 " " $15 }'
    

    如果您的文件已排序行,则此方法有效,Mauro 建议的加入是更好的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 2017-01-21
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 2019-04-09
      相关资源
      最近更新 更多