【问题标题】:Merge File1 with File2 (keep appending from File1 to File2 until no more rows)将 File1 与 File2 合并(继续从 File1 追加到 File2 直到没有更多行)
【发布时间】:2019-04-02 15:54:54
【问题描述】:

我找不到解决方案。 所以这就是问题所在。 结果应该是 100 行 (File1),其中来自 File2 的内容重复 25 次。 我想要的是加入内容,即使行数不相等。不断重复包括 File2 中的行,直到满足 File1 中的行数为止。

文件1:

test1@domain.com
test2@domain2.com
test3@domain3.com
test4@domain4.com

文件2:

A1,B11
A2,B22
A3,B33
A4,B44

我想要的是组合以下文件以获得以下预期结果:

文件3:

test1@domain.com,A1,B12
test2@domain2.com,A2,B22
test3@domain3.com,A3,B33
test4@domain4.com,A4,B44

这里注意:文件2中的4行结束后,从第一行重新开始,然后重复。

test5@domain5.com,A1,B12
test6@domain6.com,A2,B22
test7@domain7.com,A3,B33
test8@domain8.com,A4,B44

【问题讨论】:

  • 如果您的意思是 A1,B11 而不是 A1,B12,请编辑。

标签: bash awk sed


【解决方案1】:

您问题中的示例不清楚,但我认为这是您想要做的:

$ awk -v OFS=',' 'NR==FNR{a[++n]=$0;next} {print $0, a[(FNR-1)%n+1]}' file2 file1
test1@domain.com,A1,B11
test2@domain2.com,A2,B22
test3@domain3.com,A3,B33
test4@domain4.com,A4,B44
test5@domain5.com,A1,B11
test6@domain6.com,A2,B22

上面是针对这个输入运行的:

$ cat file1
test1@domain.com
test2@domain2.com
test3@domain3.com
test4@domain4.com
test5@domain5.com
test6@domain6.com
$
$ cat file2
A1,B11
A2,B22
A3,B33
A4,B44

【讨论】:

  • 我相信你可以使用a[n++]a[(FNR-1)%n] 来减少它
  • @kvantour 是的,但是你最终会得到一个从零开始索引的数组,这违背了 awk 总是从 1 开始索引数组、字段和字符串的方式,所以我原则上更愿意避免这种情况。
【解决方案2】:

请您尝试关注一下。

awk '
BEGIN{
  OFS=","
}
FNR==NR{
  a[++count]=$0
  next
}
{
  count_curr++
  count_curr=count_curr>count?1:count_curr
  print a[count_curr],$0
}
'  Input_file2  Input_file1

【讨论】:

  • @Jax,很高兴它对您有所帮助,请检查此链接一次 stackoverflow.com/help/someone-answers 您也可以选择正确的答案,干杯。
  • 已投票。不幸的是,它不可见,因为我的声望不到 15。新用户。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
相关资源
最近更新 更多