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

Posted

技术标签:

【中文标题】如何在bash中重复行并粘贴不同的列?【英文标题】:How to repeat lines in bash and paste with different columns? 【发布时间】:2015-12-14 00:12:13 【问题描述】:

在 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

提前致谢。

【问题讨论】:

【参考方案1】:

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

awk 'FNR==NRa[++n]=$0; next for(i=1; i<=n; i++) print $0, 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]=$0                  # 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 $0, a[i]             # print current row and array element

【讨论】:

哇,我知道 awk 很棒。我真的需要更多地学习如何使用它。谢谢,这行得通。【参考方案2】:

awk 的替代品

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

join添加一个假密钥,让file1的所有记录匹配file2的所有记录,然后修剪

【讨论】:

以上是关于如何在bash中重复行并粘贴不同的列?的主要内容,如果未能解决你的问题,请参考以下文章

从存储过程结果中删除重复的列行并连接其他列[重复]

bash:如何将字符串添加到 stderr 行并按确切顺序组合 stdout 和 stderr 并存储在 bash 中的一个变量中?

在R中使用带有折叠的粘贴时如何创建引号[重复]

如何在集合视图中为不同的行实现不同的列数[重复]

如何获取在 SQL Server 内部数据库的不同表中重复的列[重复]

如何检查html表是不是在js中重复行并对输入求和而不是插入另一行?