合并两个文件中的数据以生成新的数据集

时间:2013-07-24 17:45:10

标签: linux bash awk

我有一个包含此脚本(((A:__ ,B:__ ):__ ,C:__ ):__ ,D:__ )

的行的文件

我还有其他六个文本文件,每个文件包含500个随机数。我需要将这些随机数添加到第一个文件的空白处。

即。如果t1,t2,t3,t4,t5,t6是六个文件,他们有数字,如

t1   t2   t3   t4   t5   t6
2    32   34   213  23   54
3    34   34   67   56   56 
5    45   78   78   89   32 
5    23   45   45   67   78
...  ...  ...  ...  ...  ...

将这些合并后,我应该得到像

这样的结果
(((A:2,B:32):34,C:213):23,D:54)
(((A:3,B:34):34,C:67):56,D:56)

我尝试过粘贴函数和循环来创建这种对齐,但是它们没有将文本放在正确的位置。我如何使其工作? 我在Linux中这样做。

2 个答案:

答案 0 :(得分:2)

我认为这样做会:

paste t1 t2 t3 t4 t5 t6 |
    awk 'BEGIN { getline < "template"; gsub("__", "%f"); format = $0 }
         { printf(format"\n", $1, $2, $3, $4, $5, $6); }'

paste将6个输入文件合并在一起。 awk脚本的第一行读取第一个文件(用文件名替换template)并将每个__更改为%s,以便将其用作格式带有printf的字符串。

答案 1 :(得分:1)

使用bash文件描述符的解决方案对我有用...我打开每个文本文件的文件描述符(你必须从FD 3开始,因为0-2是由stdin,stdout,stderr。)然后,只要t1中有数据,我就会继续读取t2-t6,只需打印出所需格式的输出。

#!/bin/bash    
exec 3<> t1.txt    
exec 4<> t2.txt    
exec 5<> t3.txt    
exec 6<> t4.txt    
exec 7<> t5.txt    
exec 8<> t6.txt    
while read one <&3     
  do    
    read two <&4    
    read three <&5    
    read four <&6    
    read five <&7    
    read six <&8    
    echo "(((A:$one,B:$two):$three,C:$four):$five,D:$six)"    
  done