bash中的行的乘法

Ton*_*ark 0 linux bash text

我想做一些像乘法的东西:

文件1:

aa
bb
Run Code Online (Sandbox Code Playgroud)

文件2:

cc
dd
Run Code Online (Sandbox Code Playgroud)

文件3:

eee
fff
ggg
Run Code Online (Sandbox Code Playgroud)

我想得到一个结果:

aa cc eee
aa cc fff
aa cc ggg
bb dd eee
bb dd fff
bb dd ggg
Run Code Online (Sandbox Code Playgroud)

File1和File2的第一个元素将乘以File3的每个元素,与File1和File2的第二个元素相同,与File3的每个元素相乘.

Ben*_* W. 5

这可行:

$ join -j 9999 <(paste file1 file2) file3
 aa cc eee
 aa cc fff
 aa cc ggg
 bb dd eee
 bb dd fff
 bb dd ggg
Run Code Online (Sandbox Code Playgroud)

它连接在一个不存在的字段(字段9999)上,该字段创建输入文件的笛卡尔积.对于输入文件,paste file1 file2将前两个文件合并为一个,并join使用进程替换.

一个轻微的障碍是每条线上都有一个空间; 要摆脱它,你可以管道sed:

join -j 9999 <(paste file1 file2) file3 | sed 's/^ //'
Run Code Online (Sandbox Code Playgroud)

或指定输出格式:

join -j 9999 -o 1.1,1.2,2.1 <(paste file1 file2) file3
Run Code Online (Sandbox Code Playgroud)