[20121212]把每行的資料加起來最快的方法.txt

lfree發表於2012-12-13
[20121212]把每行的資料加起來最快的方法.txt

# grep "^08:44:11" aa1
08:44:11 pread(18, "\25\302\0\0\1\0\0\0\0\0\0\0\0\0\1\4\350\336\0\0\0\0\0\0\0\3 \nhW\344D"..., 16384, 16384) = 16384
08:44:11 pread(19, "\25\302\0\0\1\0\0\0\0\0\0\0\0\0\1\4\350\336\0\0\0\0\0\0\0\3 \nhW\344D"..., 16384, 16384) = 16384
08:44:11 pread(20, "\25\302\0\0\1\0\0\0\0\0\0\0\0\0\1\4\350\336\0\0\0\0\0\0\0\3 \nhW\344D"..., 16384, 16384) = 16384
08:44:11 pread(18, "\25\302\0\0\'\0\0\0v\206B\0\377\377\1\4\363\322\0\0\0\0000\0\0\0\0\0\0\0\0\0"..., 16384, 638976) = 16384
08:44:11 pread(18, "\25\302\0\0)\0\0\0v\206B\0\377\377\1\4\371X\0\0\0\0\0\0\0\0\0\0\350\vo%"..., 16384, 671744) = 16384
08:44:11 pread(18, "\25\302\0\0.\0\0\0v\206B\0\377\377\1\4\276\211\0\0\0\220\1\0|v\0\0\1\0\0\0"..., 16384, 753664) = 16384
08:44:11 pread(18, "\25\302\0\0,\0\0\0008\206B\0\377\377\1\4|\325\0\0\17\0\0\0v\252\244M\0\0\30\237"..., 16384, 720896) = 16384
08:44:11 pread(18, "\25\302\0\0\1\0\0\0\0\0\0\0\0\0\1\4\350\336\0\0\0\0\0\0\0\3 \nhW\344D"..., 16384, 16384) = 16384
08:44:11 pread(18, "\25\302\0\0\'\0\0\0v\206B\0\377\377\1\4\363\322\0\0\0\0000\0\0\0\0\0\0\0\0\0"..., 16384, 638976) = 16384
08:44:11 pread(18, "\25\302\0\0)\0\0\0v\206B\0\377\377\1\4\371X\0\0\0\0\0\0\0\0\0\0\350\vo%"..., 16384, 671744) = 16384
08:44:11 pread(18, "\25\302\0\0\245\3\0\0\2228@\0\377\377\1\4J\336\0\0\335\1\0\0\210\1\0\0\4\7\211/"..., 16384, 15286272) = 16384
08:44:11 pread(18, "\25\302\0\0\274\3\0\0+\211@\0\377\377\1\4\262\264\0\0\372\1\0\0\304\7\0\0\333M\221/"..., 16384, 15663104) = 16384
08:44:11 pread(18, "\25\302\0\0\17\4\0\0\203|A\0\377\377\1\4]n\0\00001_000002988"..., 1048576, 17022976) = 1048576
08:44:11 pread(18, "\25\302\0\0\365\3\0\0\276\5A\0\377\377\1\4\7\204\0\0O\2\0\0H\n\0\0p%\236/"..., 425984, 16596992) = 425984
08:44:11 pread(18, "\25\302\0\0\245\3\0\0\2228@\0\377\377\1\4J\336\0\0\335\1\0\0\210\1\0\0\4\7\211/"..., 16384, 15286272) = 16384
08:44:11 pread(18, "\25\302\0\0\273\3\0\0!\211@\0\377\377\1\4\265\260\0\0\372\1\0\0\304\7\0\0\333M\221/"..., 458752, 15646720) = 458752
08:44:11 pread(18, "\25\302\0\0\245\3\0\0\2228@\0\377\377\1\4J\336\0\0\335\1\0\0\210\1\0\0\4\7\211/"..., 294912, 15286272) = 294912
08:44:11 pread(18, "\25\302\0\0\307\1\0\0$/@\0\377\377\1\4\16j\0\0,\26\210/\26\4\1\0\226r\0\0"..., 32768, 7454720) = 32768
08:44:11 pread(18, "\25\302\0\0\274\3\0\0+\211@\0\377\377\1\4\262\264\0\0\372\1\0\0\304\7\0\0\333M\221/"..., 16384, 15663104) = 16384
08:44:11 pread(18, "\25\302\0\0\365\3\0\0\276\5A\0\377\377\1\4\7\204\0\0O\2\0\0H\n\0\0p%\236/"..., 16384, 16596992) = 16384
08:44:11 pread(18, "\25\302\0\0\33\5\0\0\334\362>\0\377\377\1\4\222u\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1048576, 21413888) = 1048576
08:44:11 pread(18, "\25\302\0\0\333\4\0\0\26\370=\0\377\377\1\4\24H\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1048576, 20365312) = 1048576
08:44:11 pread(18, "\25\302\0\0\237\4\0\0006\23=\0\377\377\1\4\357\316\0\0\0\0\0\0\0\0\0\0\231\233-/"..., 983040, 19382272) = 983040
08:44:11 pread(18, "\25\302\0\0\245\3\0\0\2228@\0\377\377\1\4J\336\0\0\335\1\0\0\210\1\0\0\4\7\211/"..., 16384, 15286272) = 16384
08:44:11 pread(18, "\25\302\0\0\274\3\0\0+\211@\0\377\377\1\4\262\264\0\0\372\1\0\0\304\7\0\0\333M\221/"..., 16384, 15663104) = 16384
08:44:11 pread(18, "\25\302\0\0C\4\0\0=cB\0\377\377\1\4x\27\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1048576, 17874944) = 1048576

-- 這個是一個strace的輸出,我要把等號後面的數字加起來。

# grep "^08:44:11" aa1 | cut -f2 -d'='
 16384
 16384
 16384
 16384
 16384
 16384
 16384
 16384
 16384
 16384
 16384
 16384
 1048576
 425984
 16384
 458752
 294912
 32768
 16384
 16384
 1048576
\0\377\377\1\4\24H\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1048576, 20365312)
\0\377\377\1\4\357\316\0\0\0\0\0\0\0\0\0\0\231\233-/"..., 983040, 19382272)
 16384
 16384
cB\0\377\377\1\4x\27\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1048576, 17874944)

--這樣由於裡面的字元有多餘的等號=,無法實現。
--如何實現取後面的數值呢?
--想起以前一篇文件提到無用的rev命令。

# grep "^08:44:11" aa1 | rev | cut -f1 -d'=' | rev | xargs echo | vim -c '+1,$s/ /+/g' + '+wq /tmp/bb1' - > /dev/null 2>&1 ;bc < /tmp/bb1
6668288
--雖然使用兩行命令,但是還是挺簡潔的。

# grep "^08:44:11" aa1 | rev | cut -f1 -d'=' | rev | xargs echo | sed 's/ /+/g' | bc -l
6668288

# grep "^08:44:11" aa1 | rev | cut -f1 -d'=' | rev | sed -e 's/$/+/g' -e '$s/+$//g'| xargs echo| bc -l
6668288

--也許還有更好的方法。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-751058/,如需轉載,請註明出處,否則將追究法律責任。

相關文章