多个文本文件与不均匀行的水平合并
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多个文本文件与不均匀行的水平合并相关的知识,希望对你有一定的参考价值。
如果下面的问题看起来像重复但我没有找到任何合适的解决方案,请事先道歉。
我试图水平合并几个文本文件。以下是格式说明:
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等。
非常感谢你的时间
答案
好的,我自己得到了答案,完全错误接近原帖中的那个(我显然是新手):
find /path_to_files -type f -name '*final_significant*' -exec paste {} + >> merged_file.txt
但是现在我面临着粘贴行数不均匀的文件的常见问题 - 即混乱的列。任何人都可以修改上面的代码,以获得如上所示的所需输出?已经尝试了几种awk和sed解决方案在我的情况下没用。谢谢!
以上是关于多个文本文件与不均匀行的水平合并的主要内容,如果未能解决你的问题,请参考以下文章