如何用模式匹配的sed写多个文件

时间:2013-02-04 01:57:52

标签: linux sed

我有这样的文件

Orange 23 34 56
Apple 23 44 56
Pear 23 44 56

我想使用sed,以便将水果后的数字移动到不同文件中的文件名Orange.txtApple.txt

类似

s -re 's/(^\w+).*//' > \1.txt

我知道我可以用awk做,但我只想要sed解决方案没有其他unix命令

2 个答案:

答案 0 :(得分:2)

这是一种方法,使用GNU sed

sed -r 's/(\w+) (.*)/echo "\2" >> \1.txt/e' file

但为什么你不能使用awk。它真的使问题变得微不足道:

awk '{ print $2, $3, $4 > $1 ".txt" }' file

或者,如果您有很多列:

awk '{ r=$1; sub($1 FS, ""); print > r ".txt" }' file

答案 1 :(得分:0)

如果你愿意提前写下所有可能水果的巨大清单,这只能在sed中实现。然后它看起来像这样:

#! /usr/bin/sed -nf

/^Apple /w Apple.txt
/^Durian /w Durian.txt
/^Kiwi /w Kiwi.txt
/^Orange /w Orange.txt
/^Pear /w Pear.txt
/^Pineapple /w Pineapple.txt
/^Tomato /w Tomato.txt
# ... perhaps dozens more lines ...

如果你不能提前列出所有可能的水果,那么这是不可能的。但是,即使你可以,你真的想让自己成为每日WTF的特色吗?

awk '{ print > $1 ".txt" }'