我有一个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.txt和bar.txt ,具体取决于行bar.txt的foo和bar是否存在?
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