如何重复 bash 中的行并粘贴到不同的列?

How to repeat lines in bash and paste with different columns?

在 bash 中是否有一种捷径可以根据需要重复文件的第一行,以便将其粘贴到 kronecker 产品类型的另一个文件中(对于你们这些数学家)? 我的意思是,我有一个文件 A:

    a
    b
    c

和文件 B:

    x
    y
    z

我想按如下方式合并它们:

    a x
    a y 
    a z
    b x
    b y
    b z
    c x
    c y
    c z

我可能会写一个脚本,逐行读取文件并循环遍历它们,但我想知道是否有一个简短的单行命令可以完成同样的工作。我想不出一个,如您所见,我也缺少一些要搜索的关键字。 :-D

提前致谢。

您可以使用这个单行 awk 命令:

awk 'FNR==NR{a[++n]=[=10=]; next} {for(i=1; i<=n; i++) print [=10=], a[i]}' file2 file1
a x
a y
a z
b x
b y
b z
c x
c y
c z

分手:

NR == FNR {                  # While processing the first file in the list
  a[++n]=[=11=]                  # store the row in array 'a' by the an incrementing index
  next                       # move to next record
}
{                            # while processing the second file 
  for(i=1; i<=n; i++)        # iterate over the array a
  print [=11=], a[i]             # print current row and array element
}

awk 的替代品

join <(sed 's/^/_\t/' file1) <(sed 's/^/_\t/' file2) | cut -d' ' -f2-

join 添加一个假密钥,使文件 1 的所有记录与文件 2 的所有记录相匹配,trim 之后