bash - 使用 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
输入文件集将具有可变数量的字段和可变数量的行(但是这些在输入文件集中总是相同的)
非常感谢!
解决方案
更通用的解决方案和 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'
推荐阅读
- javascript - 使用递归计算字符串中的每个字符
- etl - 如果维度/事实表中的数据未正确加载,我需要执行哪些步骤来清理数据
- java - 如何在自定义 MVC 中处理控制器/视图创建
- excel - 如何在 Excel 中找到引用单元格的超链接?反向超链接
- r - R中奇怪的输出类
- shell - Condor 出错:“$INT() 宏:50+ $((0/41)) 不计算为整数!”
- javascript - automapper-ts 使用 typeorm 返回空对象
- reactjs - How to update apollo cache state BEFORE mutation, for actions like Like, Upvote etc.?
- docker - 尝试更改 Docker 容器上的默认 Jenkins 端口
- c# - 在新域中无法 GetTypes()