2015-05-24 3 views
0

Вещь, я хотел бы отсортировать эти строки из файла, не меняя содержимого файла. Строки в файле не должны быть изменены после операции сортировки. Я хочу использовать строки для их редактирования позже, поэтому моя переменная var должна получать значения, начиная с 0: wc ... 'до 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

Это прекрасно работает :). Как мне сопоставить, не распечатывать отсортированные результаты в моей консоли? – ZeroZek

0

два вопроса:

  1. При создании трубы, например command | while read line; do ... end, отдельные команды в трубе (command и while read line; do ... end) работают в подоболочных устройствах.

    Подголоски создаются с копиями всех текущих переменных, но не могут отражать изменения в их родительском. В этом случае line присутствует только в подоболочке, и когда подоболочка оканчивается, она исчезает вместе с ней.

    Вы можете использовать подстановку bash, чтобы избежать создания подоболочки для одной из команд конвейера. Например, вы можете использовать:

    while read line; do ... end < <(command) 
    
  2. Если вы оба трубочку и перенаправлять редирект выигрывает.

    Поэтому, когда вы пишете: command | while read line; do ... end < input, цикл while фактически считывается с input, а не с вывода команды.

1

Почему просто не

$ sort -k1n -t: file.txt 

, указав разделитель полей как ':'.

Смежные вопросы