0

我有一个文件,其中包含该脚本的一行(((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 中这样做。

4

2 回答 2

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.

于 2013-07-24T17:58:49.003 回答
1

使用对我有用的 bash 文件描述符的解决方案...我为每个文本文件打开一个文件描述符(您必须从 FD 3 开始,因为标准输入、标准输出、标准错误采用 0-2。)然后,只要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    
于 2013-07-24T18:15:18.377 回答