2010-11-25 91 views
2

我有一個製表符分隔的行,我只想對第一列進行排序。Unix排序只能對一列進行排序

這可以通過使用Unix排序來實現嗎?

u.s 2||`` U.S ''||527 || 107 
u.s. 2||`` U.S. ''||532 || 107 
us. 2||Us.||532 || 112 
u.s. 2||U.s.||629 || 112 
us. 2||US.||6444 || 112 
us 2||US||8655700 || 27 
u.s 2||U.s||992 || 112 

它使用

u.s 
u.s. 
us. 
u.s. 
us. 
us 
u.s 

點不會被那種認爲排序。使用sort -k1後,上面的一個進行排序。 美國。和美國不在一起。

+0

我不知道什麼是製表符分隔一行意味着,你能請舉一個例子嗎? – 2010-11-25 05:15:19

+0

排序時沒有考慮點, – AlgoMan 2010-11-25 05:26:31

回答

2

如果你第一字段排序,沒有任何理由,除非你想指定的關鍵忽略該行的其餘部分。如果你想這樣做,你需要做-k1,1。您將需要指定C區域(或者可以使用的代名詞POSIX語言環境不可忽視的時期。

LC_COLLATE=C sort -k1,1 inputfile 

LC_COLLATE=C sort inputfile 
0

我相信你正在尋找:

sort -k 1 filetosort 

Tab是一個空格分隔,這是排序默認的分隔。

0

我的排序(在Linux上)可以做到這一點。我不知道它是多麼便攜。在bash:

sort -k1 -t$'\t' 

-k1給出了鍵列(多個)的ID,-t指定字段分隔符。

1

你可能需要設置排序的語言環境,並將其設置爲C語言環境:

LANG=C sort -k1 data.file