2012-11-29 112 views
1

我有一個矩陣(5800行和350列)的數字。每個單元要麼是從矩陣中的單元格中刪除空格

0/0 
1/1 
2/2 

什麼是刪除所有空格在每個單元中,有最快的方法:

0/0 
1/1 
2/2 

桑達,R,任何將最快做到這一點。

+1

也許你應該多描述一下你的輸入。矩陣?在什麼?爲什麼不只是說「我有一個文本文件」,如果那是你的? – TLP

+1

由於您沒有提供有關輸入文件格式或所需輸出的足夠信息,因此您會得到大量無用的解決方案。至少告訴我們用什麼字符分隔矩陣中的單元格。 –

+0

是的,它是一個文本文件,但我說矩陣(逗號分隔),因爲它更準確地描述它不是它。 – cianius

回答

1

如果你想提高效率,你應該使用的coreutils TR對於這樣一個簡單的任務:

tr -d ' ' < infile 

我比較反對300K文件中公佈答案,使用GNU AWK,GNU sed的,PERL v5.14.2和GNU coreutils v8.13。這些測試是每次運行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的輸出。

+0

由於我知道如何在R和SED中執行此操作,因此此答案獲勝,因爲它顯示的是最快的。謝謝! – cianius

1

使用的sed:

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

這意味着:

更換一個斜槓(/\/)字符串"/"/ \/ /),並做到全球(/g)。

+1

'sed's =/=/= g''似乎更具可讀性。 – choroba

+0

@choroba:好多了!感謝您的提示:) – Yamaneko

1

這裏是一個awk替代,做同樣的事情:

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

說明:

  • awk '{...}':調用AWK,然後爲每個行做括在大括號的東西。
  • gsub(" ","");:用空字符串替換所有空格字符(單行或多行)。
  • print:打印整個線
  • input.txt:指定輸入文件作爲參數傳遞給awk的
  • > output.txt:輸出重定向到文件中。
1

一個Perl的解決辦法是這樣的:

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

您可以添加-i轉行做就地編輯。