2013-01-11 67 views
0

我想使用SORT命令對基於第5列的表格文件進行排序,但是第3列中有一些缺失值。我注意到排序命令在-k5,5下無法正常工作,但-k1,1或-k2,2沒有問題。是因爲缺少價值嗎?排序 - 如果某些列中存在缺失值,該怎麼辦?

+0

似乎它以某種方式忽略了額外的空白,是空白數據是關鍵還是可以嘗試用一些'sed' /'awk' magic,並在空格中加上空格值,例如'.'或'0',看看它是否允許'-k5,5'工作? – Grambot

+1

如果通過「缺少」您的意思是「空的」,排序不能確定:它只會看到四列。 – fge

+1

我的意思是「失蹤」,兩個連續的TAB。 – Runner

回答

5

默認情況下,sort認爲只要有空格字符後面跟着非空白字符就開始字段。例如,在此片段:

a  b  c  d 
e   f  g 

第一行有四個字段,並且所述第二行有三個字段。

如果要使用不同的分隔符,可以使用-t選項指定該分隔符。例如,使用製表符作爲分隔符,你可以這樣寫:

sort -t $'\t' -k 5,5 

,將讓sort檢測空字段(因爲兩個連續的標籤將被解釋爲兩個不同的分離器,它們之間的空場)。

+0

非常感謝你! – Runner

+0

@Runner:不客氣! – ruakh

+0

還有一個問題:爲什麼在這裏使用$'\ t'?我可以在這裏使用「\ t」嗎?有什麼不同? – Runner

0

如果你有時缺少列,我要去猜測,你的數據是固定的格式,即,以文字排列如下:

1 2  3 
2 23 12345 

或本

1 2 3 
2 23 12345 

,而不是這

1 2 3 
2 23 12345 

如果這是真的,你可以使用一個實際上不出現在inp中的製表符並使用類似-t/ -k1.20這樣的密鑰對現在的單個字段進行排序,以便對從第20列開始的字符進行排序。

相關問題