多个文本文件与不均匀行的水平合并

问题描述 投票:1回答:1

如果下面的问题看起来像重复但我没有找到任何合适的解决方案,请事先道歉。

我试图水平合并几个文本文件。以下是格式说明:

1)所有文件都包含“_final_significant”作为其文件名中的公共部分(例如File1_final_significant.txt,File2_final_significant.txt等)

2)这些文件位于不同的子目录中。每个文件夹包含一个* _final_significant.txt文件以及其他.txt文件

e.g

Folder 1
File1_final_significant.txt
Irrelevantfile.txt

Folder 2
File2_final_significant.txt
Irrelevantfile.txt
etc

我想只合并所有文件夹中的_final_significant.txt文件。

3)每个目标文件具有不均匀的行数和三列中的数据,以空格分隔。目标文件之间没有共享值。

e.g

File1_final_significant.txt
Name1 Name2 Value1
Name3 Name4 Value2
n rows

File2_final_significant.txt
Name5 Name6 Value3
Name7 Name8 Value4
k rows

期望的输出是

Merged_file.txt

Name1 Name2 Value1 Name5 Name6 Value3 etc
Name3 Name4 Value2 Name7 Name8 Value4 etc
n rows             k rows

我知道这是一个常见的问题,到目前为止,我尝试了几个从类似帖子中找到的建议但没有成功。我遇到了以下解决方案,但不是水平合并我的文件内容,而是合并文件目录。

find /path_to_files -type f -name '*final_significant*' | xargs | paste -s >> merged_file.txt

这是我第一次使用查找或粘贴命令,所以我将非常感谢您的帮助和时间。请在答案中仅包含bash选项,上面是一个更大更复杂的脚本的一部分,我宁愿不转移到perl / R等。

非常感谢你的时间

merge find paste
1个回答
0
投票

好的,我自己得到了答案,完全错误接近原帖中的那个(我显然是新手):

find /path_to_files -type f -name '*final_significant*' -exec paste {} +  >> merged_file.txt

但是现在我面临着粘贴行数不均匀的文件的常见问题 - 即混乱的列。任何人都可以修改上面的代码,以获得如上所示的所需输出?已经尝试了几种awk和sed解决方案在我的情况下没用。谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.