我有一个数字矩阵(5800 行和 350 列)。每个细胞要么是
0 / 0
1 / 1
2 / 2
删除每个单元格中所有空格的最快方法是什么:
0/0
1/1
2/2
Sed,R,任何能最快完成它的东西。
使用 sed:
sed "s/ \/ /\//g" input.txt
它的意思是:
用一个斜杠 ( )替换字符串
" / "
( ) 并全局执行 ( )。/ \/ /
/\/
/g
这是一个awk
完全一样的替代方案:
awk '{gsub(" ",""); print}' input.txt > output.txt
说明:
awk '{...}'
: 调用 awk,然后为每一行做用大括号括起来的东西。gsub(" ","");
:用空字符串替换所有空格字符(单个或多个连续)。print
:打印整行input.txt
: 将您的输入文件指定为 awk 的参数> output.txt
: 将输出重定向到文件。如果你想提高效率,你可能应该使用 coreutils tr 来完成这样一个简单的任务:
tr -d ' ' < infile
我使用 GNU awk、GNU sed、perl v5.14.2 和 GNU coreutils v8.13 将发布的答案与 300K 文件进行了比较。每个测试运行 30 次,这是平均值:
awk - 1.52s user 0.01s system 99% cpu 1.529 total
sed - 0.89s user 0.00s system 99% cpu 0.900 total
perl - 0.59s user 0.00s system 98% cpu 0.600 total
tr - 0.02s user 0.00s system 90% cpu 0.020 total
所有的睾丸都按上述方式运行 ( cmd < infile
) 并且输出定向到 /dev/null。
perl 解决方案可能如下所示:
perl -pwe 'tr/ //d' input.txt > output.txt
您可以添加-i
开关以进行就地编辑。