a.out
標準出力で多数のメッセージを生成するプログラムを考えてみましょう。たとえば、次のようになります。
$ ./a.out
A: abc
B: xyz
A: aaa
A: bbb
B: zzz
C: fff
...
私が必要とするのは、出力を別々のファイルに区別することです。 1つはA:
プレフィックス付きの行を含める必要があり、2番目は背面を含める必要がB:
あり、標準出力とパターンが一致しない行を残す必要があります。
もちろん、全体の出力をリダイレクトa.out
してからgrep
pingできます。ただし、出力ファイルが多いディスク領域を使用している場合、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