【问题标题】:Horizontal merging of multiple text files with uneven rows行不均匀的多个文本文件的水平合并
【发布时间】: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 所以我得到的是合并的目录路径而不是文件内容。

标签: merge find paste


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-06-11
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多