2015-05-24 87 views
0

事情是,我想從文件中數字排序這些字符串,而不更改文件的內容。排序操作後,文件中的字符串不得更改。我想稍後使用行編輯它們,所以我的變量var應該獲得以0開頭的值:wc ...'until 200:wc。

輸入:從文件數字排序字符串

11:wc 
1:wc 
0:wc 
200:wc 

所需的順序:

0:wc 
1:wc 
11:wc 
200:wc 

我使用這個代碼,但沒有效果:

sort -k1n $1 | while read line 
    do 
    if [[ ${line:0:1} != "#" ]] 
    then 
    var=$line 
    fi 
done <$1 

回答

0

您需要在第一個關鍵數字進行排序,如果你需要他們之後,才閱讀到一個數組:

myarray=($(sort -k1n <file)) 

這將提供一個數組排序後的內容:

0:wc 
1:wc 
11:wc 
200:wc 
+0

這工作正常:)。 我如何igonore,而不是在我的控制檯打印這個排序的結果? – ZeroZek

0

兩個問題:

  1. 當您創建管道(如command | while read line; do ... end)時,管道中的各個命令(commandwhile read line; do ... end)在子殼中運行。

    子殼用所有當前變量的副本創建,但不能將變化反映回其父級。在這種情況下,line僅存在於子外殼中,當子外殼終止時,它隨着它消失。

    您可以使用bash進程替換來避免爲其中一個管道命令創建子shell。例如,你可以使用:

    while read line; do ... end < <(command) 
    
  2. 如果同時管道和重定向,重定向獲勝。

    所以,當你寫:command | while read line; do ... end < input,while循環實際上從input讀取,而不是從命令的輸出。

1

爲什麼不

$ sort -k1n -t: file.txt 

指定字段分隔符爲':'。