AWK/SED.如何删除简单文本文件中的括号



我有一个文本文件,如下所示:

(-9.1744438E-02,7.6282293E-02) (-9.1744438E-02,7.6282293E-02)  ... and so on.

我想通过删除所有括号和每对夫妇的新行来修改文件所以它看起来像这样:

-9.1744438E-02,7.6282293E-02
-9.1744438E-02,7.6282293E-02
...

一个简单的方法?

感谢您的帮助,

Fred

我会将tr用于此作业:

cat in_file | tr -d '()' > out_file

使用-d开关,它只删除给定集合中的任何字符。

要添加新行,可以通过两个tr管道传输:

cat in_file | tr -d '(' | tr ')' 'n' > out_file

如前所述,几乎:

sed 's/[()]//g' inputfile > outputfile

或在awk中:

awk '{gsub(/[()]/,""); print;}' inputfile > outputfile

这会起作用-

awk -v FS="[()]" '{for (i=2;i<=NF;i+=2) print $i }' inputfile > outputfile

测试:

[jaypal:~/Temp] cat file
(-9.1744438E-02,7.6282293E-02) (-9.1744438E-02,7.6282293E-02)
[jaypal:~/Temp] awk -v FS="[()]" '{for (i=2;i<=NF;i+=2) print $i }' file
-9.1744438E-02,7.6282293E-02
-9.1744438E-02,7.6282293E-02

这可能对您有用:

echo "(-9.1744438E-02,7.6282293E-02) (-9.1744438E-02,7.6282293E-02)" |
sed 's/) (/n/;s/[()]//g'
-9.1744438E-02,7.6282293E-02
-9.1744438E-02,7.6282293E-02

我想我们都知道这一点,但只是强调一下:

就执行时间而言,使用bash命令比使用awk或sed执行相同的任务要好。例如,尽量不要在grep足够的地方使用sed/awk。

在这个特殊的案例中,我创建了一个100000行长的文件,每个文件都包含字符"("one_answers")"。然后运行

$  /usr/bin/time -f%E -o log cat file | tr -d "()"

再次,

$  /usr/bin/time -f%E -ao log sed 's/[()]//g' file

结果是:

05.44秒:使用tr

05.57秒:使用sed

cat in_file | sed 's/[()]//g' > out_file

由于格式问题,您的问题并不完全清楚是否也需要插入换行符。

最新更新