首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >合并,然后分割文件

合并,然后分割文件
EN

Stack Overflow用户
提问于 2011-12-18 00:04:32
回答 3查看 511关注 0票数 1

使用for循环,我可以合并以*.txt结尾的目录中的所有文件。

代码语言:javascript
运行
复制
for filename in *.txt; do
    cat "${filename}"
    echo
done > output.txt

完成此操作后,我将通过各种脚本运行output.txt,在这些脚本中,文本将发生很大的变化。在此之后,我希望将文件分割到不同的文件(output01.txtoutput02.txt等)中,并将它们合并在合并的位置。

  • 如何将文件在合并的同一位置拆分?

这不能基于行号,因为脚本将在某些地方添加\t。

我认为一个可能有效的解决方案是在每个初始*.txt文件的末尾放置“@”,然后再将它们合并,但我不知道如何使BASH在该标记处再次拆分这些文件。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-18 00:23:15

与用于连接的for循环不同,您可以只使用cat *.txt

无论如何,为什么不直接在for循环中对每个文件执行脚本呢?

如果您确实想要组合和重新隔离,可以使用:

代码语言:javascript
运行
复制
for filename in *.txt; do
    cat "${filename}"
    echo "@@@@@"
done > output.txt

# Pass output.txt through whatever

awk 'BEGIN { fileno = 1; file = sprintf("output%02d.txt", fileno) }; 
     { if($1 ~ /@@@@@/) { fileno++; 
                          file = sprintf("output%02d.txt", fileno); 
                          next } 
       else print >file 
     }' output.txt
票数 2
EN

Stack Overflow用户

发布于 2011-12-18 01:23:09

典型的答案是:

代码语言:javascript
运行
复制
tar c *.txt > output.txt

您可以通过以下操作将它们拆分/解锁

代码语言:javascript
运行
复制
tar xf output.txt # in the current directory
tar x -C /tmp/splitfiles/ -f output.txt

现在,如果您真的想在循环中这样做,并提取到stdout/一个管道,您可以:

代码语言:javascript
运行
复制
while read fname < <(tar tf output.txt)
do
    # extract named to pipe
    tar -xOf output.txt "$fname" | myprogram "$fname" 
done

然而,这可能不是很有效率。你可以考虑一下

代码语言:javascript
运行
复制
while read fname < <(tar x -v -C /tmp/splitfiles/ -f output.txt)
do
    # handle extracted file
    myprogram "/tmp/splitfiles/$fname" 
    unlink "/tmp/splitfiles/$fname" # drop the temp file
done

这将是完全异步的(因此,如果提取,甚至是归档的传输速度缓慢,那么在等待更多的数据到达时,第一个文件就可以被处理了)。

还请参阅我的另一个答案https://stackoverflow.com/a/8341221/85371 (查找https://stackoverflow.com/a/8341221/85371部分,因为这个问题后来被更改为非常具体)。

票数 1
EN

Stack Overflow用户

发布于 2011-12-18 16:28:55

正如Fredrik所写的here,您可以使用csplit来拆分合并的文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8548882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档