我有一个文本文件,如下所示:
(-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
由于格式问题,您的问题并不完全清楚是否也需要插入换行符。