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”,并给出了我想要的方式。非常感谢。我在评论中问模式是否可以硬编码到脚本中,他说不,它必须来自第一个文件。我在评论中问模式是否可以硬编码到脚本中,他说不,它必须来自第一个文件。