Как разбить вывод на разные файлы?
У меня есть входной файл, как
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
в начале строки?
5 ответов
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
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