1

我有一个数字矩阵(5800 行和 350 列)。每个细胞要么是

0 / 0
1 / 1
2 / 2

删除每个单元格中所有空格的最快方法是什么:

0/0
1/1
2/2

Sed,R,任何能最快完成它的东西。

4

4 回答 4

1

使用 sed:

sed "s/ \/ /\//g" input.txt

它的意思是:

用一个斜杠 ( )替换字符串" / "( ) 并全局执行 ( )。/ \/ //\//g

于 2012-11-29T20:57:28.877 回答
1

这是一个awk完全一样的替代方案:

awk '{gsub(" ",""); print}' input.txt > output.txt

说明:

  • awk '{...}': 调用 awk,然后为每一行做用大括号括起来的东西。
  • gsub(" ","");:用空字符串替换所有空格字符(单个或多个连续)。
  • print:打印整行
  • input.txt: 将您的输入文件指定为 awk 的参数
  • > output.txt: 将输出重定向到文件。
于 2012-11-29T21:22:13.740 回答
1

如果你想提高效率,你可能应该使用 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。

于 2012-11-29T22:27:23.870 回答
1

perl 解决方案可能如下所示:

perl -pwe 'tr/ //d' input.txt > output.txt

您可以添加-i开关以进行就地编辑。

于 2012-11-29T22:29:50.590 回答