Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 合并两个文件中的数据以创建新的数据集_Linux_Bash_Awk - Fatal编程技术网

Linux 合并两个文件中的数据以创建新的数据集

Linux 合并两个文件中的数据以创建新的数据集,linux,bash,awk,Linux,Bash,Awk,我有一个文件,其中包含一行脚本((a:uuuuuuuuuuuuuuu,B:uuuuuuuuuuuuuuuuuuu,C:uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 我还有另外六个文本文件,每个文件包含500个随机数。我需要将这些随机数添加到第一个文件的空白处 也就是说,如果t1、t2、t3、t4、t5、t6是六个文件,那么它们的编号如下 t1 t2 t3 t4 t5 t6 2 32 34 213 23 5

我有一个文件,其中包含一行脚本
((a:uuuuuuuuuuuuuuu,B:uuuuuuuuuuuuuuuuuuu,C:uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

我还有另外六个文本文件,每个文件包含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中这样做的。

我认为这样做可以:

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

paste
将6个输入文件合并在一起。
awk
脚本的第一行读取第一个文件(用文件名替换
template
),并将每个
\uuu
更改为
%s
,以便它可以用作
printf

的格式字符串。我认为这样做可以:

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

paste
将6个输入文件合并在一起。
awk
脚本的第一行读取第一个文件(将
模板
替换为文件名),并将每个
\uuu
更改为
%s
,这样它就可以作为一个格式字符串与
printf
一起使用对我有效的bash文件描述符的解决方案。。。我为每个文本文件打开一个文件描述符(您必须从FD3开始,因为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    
#/bin/bash
exec 3 t1.txt
exec4t2.txt
exec 5 t3.txt
exec 6 t4.txt
exec 7 t5.txt
exec 8 t6.txt

当阅读一个解决方案时,使用bash文件描述符对我有效。。。我为每个文本文件打开一个文件描述符(您必须从FD3开始,因为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    
#/bin/bash
exec 3 t1.txt
exec4t2.txt
exec 5 t3.txt
exec 6 t4.txt
exec 7 t5.txt
exec 8 t6.txt


阅读时,你必须从第一个文件中获取模板,还是可以将其硬编码到脚本中?我把问题很好地格式化了。你为什么要撤消我的工作?是的,模板应该与第一个文件相同。我没有撤消它,我必须确认你编辑了吗?嗯。。。与编辑作斗争。你必须从第一个文件中获取模板,还是可以将其硬编码到脚本中?我把问题很好地格式化了。你为什么要撤消我的工作?是的,模板应该与第一个文件相同。我没有撤消它,我必须确认你编辑了吗?嗯。。。我尝试了这个脚本。这将导致((A:0,B:0):0,C:0):0,D:0)((A:0,B:0:0,C:0):0,D:0)((A:0,B:0:0:0,C:0):0,D:0)因此所有空格都被0替换,在代码中是命令还是文件格式?其中一些数字是小数,如果您需要,我实际上找到了它,我将“%D”更改为“%f”,并给出了我想要的方式。非常感谢。我试过这个剧本。这将导致((A:0,B:0):0,C:0):0,D:0)((A:0,B:0:0,C:0):0,D:0)((A:0,B:0:0:0,C:0):0,D:0)因此所有空格都被0替换,在代码中是命令还是文件格式?其中一些数字是小数,如果您需要,我实际上找到了它,我将“%D”更改为“%f”,并给出了我想要的方式。非常感谢。我在评论中问模式是否可以硬编码到脚本中,他说不,它必须来自第一个文件。我在评论中问模式是否可以硬编码到脚本中,他说不,它必须来自第一个文件。