试试:
$ paste -d "" <(paste -d, File2.txt File3.txt) <(sed 's/^/\n,/' File1.txt )
abc,123,567,23
abc,123,568,28,Add,abc,5
xyz,234,879,30
xyz,234,880,40,Add,xyz,10
test,435,227,50
test,435,228,36,Del,test,14
工作原理
第一步需要把File2.txt和File3.txt结合起来:
$ paste -d, File2.txt File3.txt
abc,123,567,23
abc,123,568,28
xyz,234,879,30
xyz,234,880,40
test,435,227,50
test,435,228,36
其次,我们需要像这样将 File1.txt 加倍:
$ sed 's/^/\n,/' File1.txt
,Add,abc,5
,Add,xyz,10
,Del,test,14
最后,我们需要将以上两者与另一个粘贴命令结合起来:
$ paste -d "" <(paste -d, File2.txt File3.txt) <(sed 's/^/\n,/' File1.txt)
abc,123,567,23
abc,123,568,28,Add,abc,5
xyz,234,879,30
xyz,234,880,40,Add,xyz,10
test,435,227,50
test,435,228,36,Del,test,14
paste 需要文件作为参数。我们有命令。构造<(...) 将paste -d, File2.txt File3.txt 等命令的输出转换为paste 可以使用的类文件对象。 <(...) 被称为进程替换。
我们可以使用临时文件做同样的事情:
$ paste -d, File2.txt File3.txt >tmp1; sed 's/^/\n,/' File1.txt >tmp2; paste -d "" tmp1 tmp2
abc,123,567,23
abc,123,568,28,Add,abc,5
xyz,234,879,30
xyz,234,880,40,Add,xyz,10
test,435,227,50
test,435,228,36,Del,test,14
进程替换消除了对临时文件的需要。