首页 > 解决方案 > 使用 Bash 在两个文件之间逐列合并

问题描述

使用 Bash 在两个文件之间逐列合并

大家好,

我有两个文件,我想在 bash 中逐列合并。我看得很清楚,但找不到答案。下面是示例输入文件和所需的输出。

file1.txt
A,S,G,S,G
K,A,G,A,G
K,S,A,S,A

file2.txt
K,S,B,S,G
K,S,G,D,G
K,S,G,S,E

expected-output.txt
AK,SS,GB,SS,GG
KK,AS,GG,AD,GG
KK,SS,AG,SS,AE

输入文件集将具有可变数量的字段和可变数量的行(但是这些在输入文件集中总是相同的)

非常感谢!

标签: bashawksed

解决方案


更通用的解决方案和 Input_files 中的 N 个字段可能会起作用。

awk '
BEGIN{
  FS=OFS=","
}
FNR==NR{
  for(i=1;i<=NF;i++){
    array[FNR,i]=$i
  }
  next
}
{
  for(i=1;i<=NF;i++){
    $i=array[FNR,i] $i
  }
}
1
' file1  file2


您可以尝试跟随,为了好玩+仅使用显示的示例进行编写和测试,以防您的真实文件不同,那么它可能无法正常工作。

xargs -n5 < <(paste -d',' <(xargs -d',' -n1 < file1) <(xargs -d',' -n1 < file2)) |
awk '{gsub(/,/,"@");gsub(/ /,",");gsub(/@/,"")} 1' |
sed '$ d'

推荐阅读