【发布时间】:2018-11-18 13:08:55
【问题描述】:
我需要通过仅连接同一组文件的内容来输出许多不同的特定于组的文本文件。每个组内要连接的文件内容的顺序很关键,必须按所示进行维护。具体来说,我有这些文件(开发的玩具大小的示例;真实的大尺寸):
$ find . -name "*.doc" | sort -k1 -k2 -t'.'
./403and780.bunk_2018-02-09.doc
./immortalis.bunk_2018-03-01.doc
./KryptoFreak405.bunk_2018-03-01.doc
./kygiacomo.bunk_2018-02-09.doc
./Mimi108.bunk_2018-03-02.doc
./namohysip.bunk_2018-02-09.doc
./scarletcrawford.bunk_2018-02-10.doc
./SDsc0rch.bunk_2018-02-09.doc
./SDsc0rch.bunk_2018-02-10.doc
./SDsc0rch.bunk_2018-03-02.doc
./shitpostlord4321.bunk_2018-02-09.doc
./thwinks.bunk_2018-03-02.doc
基本上,我希望将 3 个 SDsc0rch 文件的内容按所示顺序放入 1 个组文件中。只有 1 403 和 780 文件同样进入其 1 组文件等。像 403 和 780 这样的组值将作为新创建的文件的名称。
这是迄今为止我最好的代码。我查看了 awk 和 datamash,但似乎无法从他们那里获得帮助。
$ find . -name "*.doc" | sort -k1 -k2 -t'.' | xargs cat #(or paste)
$ paste --serial SDsc0rch.bunk_2018-02-09.doc SDsc0rch.bunk_2018-02-10.doc SDsc0rch.bunk_2018-03-02.doc > SDsc0rch.doc
我手工制作了一个模拟粘贴命令,它只适用于一个特定的组 (SDsc0rch)。因此上面的代码是不正确的,但是像 xargs cat 或 xargs paste 这样的东西可以捕获为每个组发出的文件名,如果我只能从某个 Gnu 程序中获得按组发出的文件名。
我真的需要按组发出的组文件来分类或粘贴,然后对找到的所有组执行此操作。
由于文件数量庞大,磁盘超过 40GB,这只是一个开发示例,我不希望在写入组文件之前尝试将所有文件内容加载到工作内存中。我没有 40GB 的内存。相反,我宁愿一次只处理一个组:只连接我的排序命令识别的文件组,然后继续下一个组。
感谢您的想法。
【问题讨论】:
标签: bash file concatenation grouping