让我们a.out
将其作为产生大量消息到stdout的程序,例如:
$ ./a.out
A: abc
B: xyz
A: aaa
A: bbb
B: zzz
C: fff
...
我需要的是将输出分成单独的文件,一个应包含带有A:
前缀的行,第二个包含B:
以此类推,因此将不匹配任何模式的行留给stdout。
当然,可以重定向的整个输出a.out
,然后将其重定向grep
。但是,如果输出文件将使用大量磁盘空间,则可能没有足够的空间来存储grep
结果。
最好有一些partial-redirect
可以在这种情况下使用的命令:
./a.out | partial-redirect ^A: a.txt | partial-redirect ^B: b.txt | partial-redirect ^C: c.txt > rest.txt
这样的命令是否存在并且通用,或者您应该自己实现一些任务来解决此任务?
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句