[20191021]數值累加的各種方法.txt
[20191021]數值累加的各種方法.txt
--//前幾天跟別人的聊天,提及前一陣子給別人出的面試題.
--//給出一個文字都是數字,每行1個數值.計算累加結果.結果對方提及大部分人都沒有做出來.
--//僅僅一個給出一個方法就是匯入資料庫,然後計算(dba的思維方式),可能是太緊張,上機沒有做出來.
--//當然如果能上網,我估計大部分人都可以做出來.
--//實際上方法很多,我個人的要求是你最後算出來就可以了.做一個例子測試看看.
$ cat a.txt
301000.0000
293000.0000
66000.0000
182000.0000
98000.0000
252914.5300
235000.0000
300000.0000
330000.0000
1.方法1使用awk:
$ awk '{sum+=$1} END {printf("%.10f\n",sum)}' a.txt
2057914.5300000000
--//使用awk估計是最常用的方式.也是我不熟悉的方式.
2.使用paste+bc:
$ paste -sd+ a.txt | bc
2057914.5300
--//利用paste -s功能,不過手冊提示-s的功能是
--//-s, --serial paste one file at a time instead of in parallel,有點不是很理解.
3.實際上方法還很多:
$ cat a.txt |xargs | sed 's/ /+/g' | bc
2057914.5300
$ cat a.txt | (tr '\n' '+' ; echo 0 ) | bc
2057914.5300
$ (sed -e 's/^/s+=/g' a.txt ; echo s ) | bc
2057914.5300
--//這種方式我估計效率很低,如果記錄很多的情況下.但是好處就是如果記錄不多還是不錯的,不會出現輸入快取溢位的情況..
--//而前面的方式如果記錄很多,會出現輸入快取溢位的情況,執行時會報錯.例子:
$ seq 1000 | paste -sd+ | bc
500500
$ seq 10000 | paste -sd+ | bc
(standard_in) 1: Function too big.
4.使用dc計算器:
--//dc計算器採用壓棧出棧方式,也就是字尾方式.例子:
$ echo 1 2 + pq | dc
3
--//本例子使用dc的難點是需要輸出多少+.
$ (cat a.txt ; seq $(($(cat a.txt |wc -l ) -1 ))|xargs -I {} echo '+' ;echo pq ) | dc
2057914.5300
--//bing檢索,找到一個不用計算輸入多少加號的方法.
$ cat a.txt | dc -f - -e '[+z1<r]srz1<rp'
2057914.5300
--//-e後面那一串什麼意思,即使看了man dc文件,我也沒看懂表示什麼意思.
5.測試匯入資料庫的方式:
SCOTT@test01p> @ ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0
SCOTT@test01p> create table tt ( a number);
Table created.
$ cat a.txt | xargs -I {} echo insert into tt values ({})
$ cat a.txt | xargs -I {} echo "insert into tt values ( {} ) " | sqlplus -s -l scott/btbtms@test01p
...
SCOTT@test01p> select sum(a) from tt;
SUM(A)
----------
2057914.53
--//理論講這麼不算一種方法.也可以使用sqlldr匯入.不過有點奇怪的是windows下cvs檔案格式必須是dos的.
--//不然匯入報錯.
$ cp a.txt tt.dat
--//修改檔案tt.dat格式為dos,匯入:
D:\tools\cygwin64\home\Administrator\test> sqlldr scott/btbtms@test01p table=tt
sqlldr scott/btbtms@test01p table=tt
SQL*Loader: Release 12.2.0.1.0 - Production on Mon Oct 21 20:24:57 2019
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
Express Mode Load, Table: TT
Path used: External Table, DEGREE_OF_PARALLELISM=AUTO
Table TT:
9 Rows successfully loaded.
Check the log files:
tt.log
tt_%p.log_xt
for more information about the load.
$ sqlplus -s -l scott/btbtms@test01p <<< "select sum(a) from tt;"
SUM(A)
----------
2057914.53
--//一般bash程式設計並不太講究執行效率,有機會測試記錄很多的情況,那種方式快一些.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2660877/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20191104]數值累加的各種方法3.txt
- [20191028]數值累加的各種方法2.txt
- [20240807]數值累加的問題.txt
- [20191021]改名與namespace.txtnamespace
- numpy各種生成隨機數的方法隨機
- C++變數總結束 | 輸出各種變數的值C++變數
- 滿足條件的數累加被17整除的數的累加
- 淺談Python變數賦值的三種方法!Python變數賦值
- [20191218]各種編輯器的退出操作.txt
- Go:變數宣告的多種方法與預設值Go變數
- 各種測試方法的問題
- python中list的各種方法使用Python
- python各種加解密方法Python解密
- Linux各種變數的含義Linux變數
- jQuery獲取各種input輸入框的值jQuery
- postman中各種變數Postman變數
- 1.02 docker環境的各種搭建方法Docker
- python生成requirements.txt的兩種方法PythonUIREM
- 玩轉陣列各種方法陣列
- 12 ### 各種成員變數變數
- [20220304]使用gdb完成各種進位制轉換.txt
- JS讀取本地TXT文字的兩種方法JS
- C語言交換兩個變數的值的5種基本方法C語言變數
- C#各種加密方法,字典排序C#加密排序
- SQL Server各種日期計算方法SQLServer
- 用各種方法解01揹包
- 數值分析方法
- 各種各樣的映象加速
- 各種掃路車正確的保養方法
- js建立物件的各種方法以及優缺點JS物件
- 課時14:字串:各種奇葩的內建方法字串
- 【數值計算方法】數值積分&微分
- 含免費次數的各種好用API分享API
- 課時26:字典:各種內建方法
- №20191021◆手遊1~8◆
- [20191213]共享池繫結變數的值在哪裡.txt變數
- 在.net中讀寫config檔案的各種方法
- 遍歷物件鍵值對的兩種方法物件