2013-07-02 56 views
19

我試圖梳理基礎上,第四列該文件製表符分隔的文件。我希望文件根據第四列的值重新排序。排序基於列排序命令的bash

文件:

2 1:103496792:A 0 103496792 
3 1:103544434:A 0 103544434 
4 1:103548497:A 0 103548497 
1 1:10363487:T 0 10363487 

我想它排序是這樣的:

1 1:10363487:T 0 10363487 
2 1:103496792:A 0 103496792 
3 1:103544434:A 0 103544434 
4 1:103548497:A 0 103548497 

我試過這個命令:

sort -t$'\t' -k1,1 -k2,2 -k3,3 -k 4,4 <filename> 

,但我得到非法變量名錯誤。有人可以幫助我嗎?

回答

44

排序的第四列只使用-k 4,4選擇。

sort -t $'\t' -k 4,4 <filename> 

您可能還希望-V更自然地排序數字。例如,產生1 2 10而不是1 10 2(詞典順序)。

sort -t $'\t' -k 4,4 -V <filename> 

如果你得到關於$'\t'錯誤,那麼確保你的shell是bash。也許你在腳本的頂部缺少#!/bin/bash

+0

同樣的錯誤..非法變量名。我不知道如何解決它。我知道問題是出在$ – Vignesh

+1

確保你正在使用bash,而不是'#!/ bin中/ sh'或'SH script' –

+2

此外,'-t'選擇是可選的這裏,因爲默認列分隔符「任何空白」就足夠您的文件。 – chepner

3

我相信你有你的命令一個錯誤$

嘗試:雖然

sort -t\t -nk4 
+2

'$'..''是擴展轉義序列的bash語法。在這種情況下,它擴展到一個文字標籤。 –

+0

幫助,但它不能排序爲1 2 10比1 10 2 22 ?? – Vignesh

+1

這就是'-n'標誌應該做的(數字排序)。 – Phylogenesis