出力一致パターンの一部をファイルにパイプし、残りを標準出力として残すにはどうすればよいですか?

出力一致パターンの一部をファイルにパイプし、残りを標準出力として残すにはどうすればよいですか?

a.out標準出力で多数のメッセージを生成するプログラムを考えてみましょう。たとえば、次のようになります。

$ ./a.out

A: abc
B: xyz
A: aaa
A: bbb
B: zzz
C: fff
...

私が必要とするのは、出力を別々のファイルに区別することです。 1つはA:プレフィックス付きの行を含める必要があり、2番目は背面を含める必要がB:あり、標準出力とパターンが一致しない行を残す必要があります。

もちろん、全体の出力をリダイレクトa.outしてからgreppingできます。ただし、出力ファイルが多いディスク領域を使用している場合、grep結果を保存するのに十分な領域がない可能性があります。

partial-redirectこの状況で利用可能ないくつかのコマンドを使用することをお勧めします。

./a.out | partial-redirect ^A: a.txt | partial-redirect ^B: b.txt | partial-redirect ^C: c.txt > rest.txt

そのようなコマンドが存在し、一般的ですか、それともこのタスクを解決するために直接実装する必要がありますか?

ベストアンサー1

awk -F':' '$1 ~ "[AB]" { print > $1 } $1 !~ "[AB]" { print > "otheroutput" } ' input

あるいは、通常の場合、入力全体は最初のフィールドに基づいて分割されます。

awk -F':' '{ print > $1 }' input

使用中:

$ cat input
A: abc
B: xyz
A: aaa
A: bbb
B: zzz
C: fff
$ awk -F':' '$1 ~ "[AB]" { print > $1.txt } $1 !~ "[AB]" { print > "otheroutput" } ' input
$ cat A
A: abc
A: aaa
A: bbb
$ cat B
B: xyz
B: zzz
$ cat otheroutput
C: fff

おすすめ記事