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

时间:2018-07-12 16:37:47

标签: merge find paste

如果以下问题看似重复,但我没有找到合适的解决方案,请事先道歉。

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

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

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

例如

Folder 1
File1_final_significant.txt
Irrelevantfile.txt

Folder 2
File2_final_significant.txt
Irrelevantfile.txt
etc

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

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

例如

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等。

非常感谢您的光临

1 个答案:

答案 0 :(得分:0)

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

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

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