Bash 将两个文件中的两个列表连接到一个文件中

Bash 将两个文件中的两个列表连接到一个文件中,bash,while-loop,readline,Bash,While Loop,Readline,我有两个列表,我正试图使用bash脚本组合/加入/合并它们 清单1 file1-1 file1-2 file1-3 file1-4 等等 清单2包含 file2-1 file2-2 file2-3 file2-4 等等 我试图得到这样的输出 file1-1:file2-1 file1-2:file2-1 file1-3:file2-1 file1-4:file2-1 file1-1:file2-2 file1-2:file2-2 file1-3:file2-2 file1-4:file2-2

我有两个列表,我正试图使用bash脚本组合/加入/合并它们

清单1

file1-1
file1-2
file1-3
file1-4
等等

清单2包含

file2-1
file2-2
file2-3
file2-4
等等

我试图得到这样的输出

file1-1:file2-1
file1-2:file2-1
file1-3:file2-1
file1-4:file2-1
file1-1:file2-2
file1-2:file2-2
file1-3:file2-2
file1-4:file2-2
file1-1:file2-3
file1-2:file2-3
file1-3:file2-3
file1-4:file2-3

等等

merge.sh

#!/bin/bash

while read line2; do
  while read line1; do
    printf "$line1:$line2\n";
  done < file1.txt;
done < file2.txt;

merge.sh

#!/bin/bash

while read line2; do
  while read line1; do
    printf "$line1:$line2\n";
  done < file1.txt;
done < file2.txt;

也许这与GNU并行有关:

parallel -k -a file1 -a file2 echo

file1-1 file2-1
file1-1 file2-2
file1-1 file2-3
file1-1 file2-4
file1-2 file2-1
file1-2 file2-2
file1-2 file2-3
file1-2 file2-4
file1-3 file2-1
file1-3 file2-2
file1-3 file2-3
file1-3 file2-4
file1-4 file2-1
file1-4 file2-2
file1-4 file2-3
file1-4 file2-4
或者这个:

parallel -k -a file2 -a file1 echo {2}:{1}

file1-1:file2-1
file1-2:file2-1
file1-3:file2-1
file1-4:file2-1
file1-1:file2-2
file1-2:file2-2
file1-3:file2-2
file1-4:file2-2
file1-1:file2-3
file1-2:file2-3
file1-3:file2-3
file1-4:file2-3
file1-1:file2-4
file1-2:file2-4
file1-3:file2-4
file1-4:file2-4

也许这与GNU并行有关:

parallel -k -a file1 -a file2 echo

file1-1 file2-1
file1-1 file2-2
file1-1 file2-3
file1-1 file2-4
file1-2 file2-1
file1-2 file2-2
file1-2 file2-3
file1-2 file2-4
file1-3 file2-1
file1-3 file2-2
file1-3 file2-3
file1-3 file2-4
file1-4 file2-1
file1-4 file2-2
file1-4 file2-3
file1-4 file2-4
或者这个:

parallel -k -a file2 -a file1 echo {2}:{1}

file1-1:file2-1
file1-2:file2-1
file1-3:file2-1
file1-4:file2-1
file1-1:file2-2
file1-2:file2-2
file1-3:file2-2
file1-4:file2-2
file1-1:file2-3
file1-2:file2-3
file1-3:file2-3
file1-4:file2-3
file1-1:file2-4
file1-2:file2-4
file1-3:file2-4
file1-4:file2-4

加入一个假场地,然后修剪

join -t: <(sed 's/^/:/' file1) <(sed 's/^/:/' file2) | cut -c2-

join-t:在假字段上进行连接,然后对其进行修剪

join -t: <(sed 's/^/:/' file1) <(sed 's/^/:/' file2) | cut -c2-

join-t:此备选方案使用
awk

awk 'BEGIN {OFS=":"}
     { 
        while(getline line < "file1"){  print line,$0  }
     } 
     close("file1")
' file2
awk'BEGIN{OFS=“:”}
{ 
而(getline line<“file1”){print line,$0}
} 
关闭(“文件1”)
'文件2

此替代方案使用
awk

awk 'BEGIN {OFS=":"}
     { 
        while(getline line < "file1"){  print line,$0  }
     } 
     close("file1")
' file2
awk'BEGIN{OFS=“:”}
{ 
而(getline line<“file1”){print line,$0}
} 
关闭(“文件1”)
'文件2

可能重复的@AlessandroDaRugna实际上与从生产零件中创建的一组值创建它们不同,而不是从文件进行耦合,这需要一种不同于简单printf语句的方法。@AlessandroDaRugna的可能副本与从生产部件中创建的一组值创建它们的方法并不完全相同,也不需要从文件进行耦合,这需要一种不同于简单printf语句的方法。他们希望相反,显然是一个简单的解决方案,但我只是想提一下@999999999999999999999999999999 挑剔的!;-)谢谢。他们想要相反的方式,显然是一个简单的解决方案,但只是想让我提一下@999999999999999999999999999999 挑剔的!;-)非常感谢。