如果以下问题看似重复,但我没有找到合适的解决方案,请事先道歉。
我正在尝试水平合并几个文本文件。以下是格式说明:
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等。
非常感谢您的光临
答案 0 :(得分:0)
好吧,我自己得到了答案,完全错误的方法是原始帖子中的那个(我显然是新手):
find /path_to_files -type f -name '*final_significant*' -exec paste {} + >> merged_file.txt
但是,现在我面临的通常问题是粘贴行数不均匀的文件,即行被弄乱了。任何人都可以修改上面的代码,以获得如上所述的所需输出吗?在我的情况下,已经尝试了几种awk和sed解决方案,但没有用。 谢谢!