Как разбить вывод на разные файлы?

У меня есть входной файл, как

 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
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
Другие вопросы по тегам