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

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

我有一个输入文件

 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
 ..

如何根据行首是否存在和,将输入文件按行拆分为foo.txt和?bar.txtfoobar

答案1

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

答案2

grep ^foo input.txt > foo.txt
grep ^bar input.txt > bar.txt

^ 将确保仅匹配行的开头,因此即使该行的其余部分如下所示,它也能起作用:

foo xxx yyy zzz bar

答案3

awk '{ f = $1 ".txt"; print > f }' file

答案4

您还可以分发文件流,tee然后并行拆分:

<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

相关内容