我有一个输入文件
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.txt
foo
bar
答案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