1

私は数字のマトリックス(5800行と350列)を持っています。各セルは次のいずれかです。

0 / 0
1 / 1
2 / 2

各セル内のすべてのスペースを削除する最速の方法は次のとおりです。

0/0
1/1
2/2

Sed、R、それを最速で行うものなら何でも。

4

4 に答える 4

1

awkまったく同じことを行う代替手段を次に示します。

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

説明:

  • awk '{...}': awk を呼び出してから、各行に対して中かっこで囲まれた処理を実行します。
  • gsub(" ","");: すべての空白文字 (1 つまたは連続する複数) を空の文字列に置き換えます。
  • print: 行全体を印刷します
  • input.txt: awk の引数として入力ファイルを指定する
  • > output.txt: 出力をファイルにリダイレクトします。
于 2012-11-29T21:22:13.740 に答える
1

perl ソリューションは次のようになります。

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

スイッチを追加-iして、インプレース編集を行うことができます。

于 2012-11-29T22:29:50.590 に答える
1

sed を使用:

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

その意味は:

" / "文字列( / \/ /) を 1 つのスラッシュ ( ) に置き換えて、/\/グローバルに実行します ( /g)。

于 2012-11-29T20:57:28.877 に答える
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 に答える