У меня есть входной файл вроде
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
в начале строки?
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
Попробуйте этот код и при необходимости внесите изменения, так как я не пробовал его запускать.
awk '
BEGIN { foo="foo.txt"; bar="bar.txt" }
{if ($1 == "foo")
$0 >> foo;
else
$0 >> bar;
}' sourcefilename
awk '{ f = $1 ".txt"; print > f }' file
grep ^foo input.txt > foo.txt
grep ^bar input.txt > bar.txt
^ обеспечит соответствие только началу строки, поэтому он будет работать, даже если остальная часть строки выглядит так:
foo xxx yyy zzz bar
Вы также можете распространять файловый поток с помощью 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