3

我有这样的文件

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 命令

4

2 回答 2

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
于 2013-02-04T02:26:24.050 回答
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 ...

如果您不能提前列出所有可能的水果,那么这显然是不可能的。但是,即使您可以,您是否真的想要让自己成为 Daily WTF 的特色?

awk '{ print > $1 ".txt" }'
于 2013-02-04T02:14:50.803 回答