作者 主題: sort -n -u 問題  (閱讀 2888 次)

0 會員 與 1 訪客 正在閱讀本文。

614915022

  • 可愛的小學生
  • *
  • 文章數: 6
    • 檢視個人資料
sort -n -u 問題
« 於: 2010-04-02 19:22 »
執行如下:

[kaoheiay-vm1@localhost ~]$ cat 001
22
10000
100
cc
bbb
100
cc
[kaoheiay-vm1@localhost ~]$ sort -n 001
bbb
cc
cc
22
100
100
10000
[kaoheiay-vm1@localhost ~]$ sort -u 001
100
10000
22
bbb
cc
[kaoheiay-vm1@localhost ~]$ sort -n -u 001
22
100
10000


請問 -n -u 這兩個選項是不能並存嗎? 怎麼一起用時英文不見了,只剩數字,但單獨執行 -u 或 -n,英文會在???
[img]http://i744.photobucket.com/albums/xx83/614915022/2.jpg[/ img]

sakana

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 2589
  • 性別: 男
    • 檢視個人資料
    • sakananote
回覆: sort -n -u 問題
« 回覆 #1 於: 2010-04-03 11:58 »
max@Max-PC:/tmp/lab> cat 001
22
10000
100
cc
bbb
100
cc

先以 sort 排序
max@Max-PC:/tmp/lab> sort 001
100
100
10000
22
bbb
cc
cc

-u 去除掉重複的 ^^

max@Max-PC:/tmp/lab> sort -u 001
100
10000
22
bbb
cc

摟主這個問題很好玩, 在我的系統是 bbb不見了

max@Max-PC:/tmp/lab> sort -nu 001
cc
22
100
10000

但是如果使用 pipe 來處理, 就不會不見

max@Max-PC:/tmp/lab> sort -u 001 | sort -n
bbb
cc
22
100
10000

期待大家的解釋
^^
專心投入研究才是王道!!
http://sakananote2.blogspot.com

wenlien

  • 憂鬱的高中生
  • ***
  • 文章數: 119
  • 性別: 男
    • 檢視個人資料
    • Open or not open, that is the stupid question.
回覆: sort -n -u 問題
« 回覆 #2 於: 2010-04-03 14:11 »
以下是我的測試結果:

[stanley@Stanley-NB]:/tmp# uname -a
SunOS Stanley-NB 5.11 snv_134 i86pc i386 i86pc

[stanley@Stanley-NB]:/tmp# cat 001
22
10000
100
cc
bbb
100
cc

[stanley@Stanley-NB]:/tmp# sort -n 001
bbb
cc
cc
22
100
100
10000

[stanley@Stanley-NB]:/tmp# sort -u 001
100
10000
22
bbb
cc

[stanley@Stanley-NB]:/tmp# sort -n -u 001 #cc不見了
bbb
22
100
10000

[stanley@Stanley-NB]:/tmp# sort -u 001 | sort -n
bbb
cc
22
100
10000

我的看法是:
-n/-nu對數值呈現與否的的不一致, 姑且可以視為bug.
(如果一致, 我覺得那是定義的問題, 沒有對與錯.
就如同sort的-nu, 兩造測試出來的結果不同,
那應該是sort程式對"字串"應轉換成什麼數值的看法不同)
regards,

Stanley Huang

614915022

  • 可愛的小學生
  • *
  • 文章數: 6
    • 檢視個人資料
回覆: sort -n -u 問題
« 回覆 #3 於: 2010-04-03 14:18 »
貌似大家都不確定標準答案..........
再等等看好了.....
[img]http://i744.photobucket.com/albums/xx83/614915022/2.jpg[/ img]

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
回覆: sort -n -u 問題
« 回覆 #4 於: 2010-04-03 18:33 »
真有趣的問題 ...
(作者: 這樣都被妳抓包 , 冤枉阿 ...)

以下是小弟猜想 ..

要比較大小 , 當然要有個順序表
無論是 ascii 表或亂數表 ... 都要轉換
而轉換總得做辨識吧 ...
猜想啦 ..
猜想是轉換後 , 這辨識的方法 , 使得跑運算時出了錯

您若設計這樣一個程式 ..
有一個參數時 => 轉碼 -> 運算 -> 轉回

有兩個或多個參數時呢 ?
a => 轉碼 -> 運算參數1 -> 轉回 -> 轉碼 -> 運算參數2 ...
b => 轉碼 -> 參數1 -> 參數2 ... -> 轉回

我想做者應該選 b 吧 ...

算不算 bug 不知道
作者有沒有發現或想到 ... 小弟也不知道
不過 help 中倒有個參數
-z, --zero-terminated     以位元組 0 而非 newline 字元作為每行的結束字元
什麼功用 , 怎麼使用 ... 呵呵 .. 俗話說 , 被人一問 , 要回三個不知道

姑且試了一下 ..
代碼: [選擇]
[dark@svr_106 ~]# x='a
> aa
> b
> b
> 1
> 11
> 2'
[dark@svr_106 ~]# echo "$x" | sort -nu
a
1
2
11
[dark@svr_106 ~]# echo "$x" | sed 's/$/A/' | sort -nu
aA
1A
2A
11A
[dark@svr_106 ~]# echo "$x" | sed 's/^/A/' | sort -nu
Aa
[dark@svr_106 ~]#
至少知道 , 不是數字 vs 字串會有問題
而是每個字母轉換時 , 做錯了什麼 ...
置換行尾那行 , 似乎在說不像整串字轉換 , 而是一個個字母來
而所有結果似乎像說 .. 出錯那一瞬間算起 , 之後運算的 "文字" 都變同一行

以上純屬猜測啦

gwstudy

  • 活潑的大學生
  • ***
  • 文章數: 205
    • 檢視個人資料
回覆: sort -n -u 問題
« 回覆 #5 於: 2010-04-04 01:01 »

[kaoheiay-vm1@localhost ~]$ sort -n -u 001
22
100
10000

請問 -n -u 這兩個選項是不能並存嗎? 怎麼一起用時英文不見了,只剩數字,但單獨執行 -u 或 -n,英文會在???

我不曾這樣用,因為 -n 都是用在該欄位是數字時,有英文字時是資料錯誤。資料有錯時結果就不可預期 (garbage in garbage out)