如何将输出分成不同的文件?

我有一个input文件

foo xxx yyy zzz foo xxx yyy zzz foo xxx yyy zzz foo xxx yyy zzz bar xxx yyy zzz bar xxx yyy zzz foo xxx yyy zzz .. 

如何将input文件按行分割为foo.txtbar.txt ,具体取决于行bar.txtfoobar是否存在?

 grep -E '^foo' input.txt > foo.txt grep -E '^bar' input.txt > bar.txt 

mbp-000234:〜dmourati $ cat foo.txt

 foo xxx yyy zzz foo xxx yyy zzz foo xxx yyy zzz foo xxx yyy zzz foo xxx yyy zzz 

mbp-000234:〜dmourati $ cat bar.txt

 bar xxx yyy zzz bar xxx yyy zzz 
 grep ^foo input.txt > foo.txt grep ^bar input.txt > bar.txt 

^将确保你只匹配行的开头,所以它将工作,即使该行的其余部分如下所示:

 foo xxx yyy zzz bar 
 awk '{ f = $1 ".txt"; print > f }' file 

试试这个代码,并做任何chages,如果需要,因为我还没有试图运行它。

 awk ' BEGIN { foo="foo.txt"; bar="bar.txt" } {if ($1 == "foo") $0 >> foo; else $0 >> bar; }' sourcefilename 

您也可以使用tee分发文件stream,然后并行分割:

 <file tee >(grep '^foo' > foo.txt) >(grep '^bar' > bar.txt) > /dev/null 

结果:

 $ tail -n+1 foo.txt bar.txt ==> foo.txt <== foo xxx yyy zzz foo xxx yyy zzz foo xxx yyy zzz foo xxx yyy zzz foo xxx yyy zzz ==> bar.txt <== bar xxx yyy zzz bar xxx yyy zzz