私は数字のマトリックス(5800行と350列)を持っています。各セルは次のいずれかです。
0 / 0
1 / 1
2 / 2
各セル内のすべてのスペースを削除する最速の方法は次のとおりです。
0/0
1/1
2/2
Sed、R、それを最速で行うものなら何でも。
awk
まったく同じことを行う代替手段を次に示します。
awk '{gsub(" ",""); print}' input.txt > output.txt
説明:
awk '{...}'
: awk を呼び出してから、各行に対して中かっこで囲まれた処理を実行します。gsub(" ","");
: すべての空白文字 (1 つまたは連続する複数) を空の文字列に置き換えます。print
: 行全体を印刷しますinput.txt
: awk の引数として入力ファイルを指定する> output.txt
: 出力をファイルにリダイレクトします。perl ソリューションは次のようになります。
perl -pwe 'tr/ //d' input.txt > output.txt
スイッチを追加-i
して、インプレース編集を行うことができます。
sed を使用:
sed "s/ \/ /\//g" input.txt
その意味は:
" / "
文字列(/ \/ /
) を 1 つのスラッシュ ( ) に置き換えて、/\/
グローバルに実行します (/g
)。
効率を求めるなら、このような単純なタスクにはおそらく 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 に向けられました。