【发布时间】:2018-07-12 16:37:47
【问题描述】:
如果以下问题看起来重复但我没有找到任何合适的解决方案,请提前道歉。
我正在尝试水平合并多个文本文件。以下是格式说明:
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 等。
非常感谢您的宝贵时间
【问题讨论】:
-
你不应该把管道从
xargs | paste -s中取出来吗? -
我得到的是以下内容:
/path_to_files/Folder1/File1_final_significant.txt /path_to_files/Folder2/File2_final_significant.txt etc所以我得到的是合并的目录路径而不是文件内容。