合并,然后切割文件
问题描述:
使用for
环,我可以合并所有的目录,与*.txt
结尾的文件中:合并,然后切割文件
for filename in *.txt; do
cat "${filename}"
echo
done > output.txt
这样做后,我将通过各种脚本运行output.txt
,其中文字会有相当大的改变。在那之后,我想分割的文件,在它们合并成不同的文件(output01.txt
,output02.txt
等)相同的地方。
- 如何在合并的地方拆分文件?
这不能根据行号,因为脚本将在地方添加\吨。
我认为这可能工作的解决方案是将“@@@@@@@@@”在每一个将它们合并前的初始*.txt
文件的结束,但我不知道怎么去BASH
到在该标记处再次分割文件。
答
而不是for
回路串联的,你可以只使用cat *.txt
。
无论如何,你为什么不只是独立的内循环for
执行上的每个文件的脚本?
如果你真的想结合,重新分离,您可以使用:
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
答
的规范的答案是:
tar c *.txt > output.txt
你可能分裂/取消合并正是通过做
tar xf output.txt # in the current directory
tar x -C /tmp/splitfiles/ -f output.txt
现在,如果你真的想要做的东西一样,在一个循环,并提取到stdout /管道,你可以:
while read fname < <(tar tf output.txt)
do
# extract named to pipe
tar -xOf output.txt "$fname" | myprogram "$fname"
done
但是,这可能不是非常有效。你可以考虑只是做
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://*.com/a/8341221/85371(寻找older answer
一部分,因为这个问题被改为非常具体版本)
串联文件的更简单的方法:'猫* .TXT> output.txt'。 – choroba 2011-12-18 00:07:12
运行在分割文件的脚本,个别。 – 2011-12-18 16:46:44