2015-10-22 2 views
0

Я пытаюсь сортировать файл с 4 столбцами по столбцу, который вводится. Мой нижеприведенный код будет сортироваться только по первому столбцу независимо от того, каким является ввод поля $.Функция сортировки столбцов Linux

if ((sort)) 
then 
     if [ $field==1 ] 
     then 
       sort -k1 $file -o $file 
     elif [ $field==3 ] 
     then 
       sort -k3 $file -o $file 
     elif [ $field==4 ] 
     then 
       sort -k4 $file -o $file 
     else #for field 2-- this is default 
       sort -k2 $file -o $file 
     fi 
fi 
+1

Это почти проблема, используемая в [tag wiki] (http://stackoverflow.com/tags/bash/info), чтобы проиллюстрировать, как превратить плохой вопрос в хороший вопрос. – chepner

+0

(Дубликат отмечен 'ksh', но ответ здесь применим.) – chepner

ответ

0

Это можно сделать еще проще:

if [ $field -lt 1 -o $filed -gt 4 ]; then 
    filed=2 
fi 
sort -k$field $file -o $file 

Update. Предыдущая версия работает, если field содержит номер. Вот новый один с помощью встроенного в тесте Баш [[:

if [[ ! $field =~ ^[0-9]+$ || $field < 1 || $field > 4 ]]; then 
    filed=2 
fi 
sort -k$field $file -o $file 

Здесь $field =~ '^[0-9]+$' проверяет переменная содержит число.

+0

Не используйте' -o'; use '[" $ field "-lt 1] || ["$ field" -gt 4] 'вместо этого. – chepner

+0

@chepner почему? Я нашел [this] (http://stackoverflow.com/a/6917370/1677270), где '-o' /' -a' помечен как менее читаемый. Может, я что-то пропустил? – SergA

+0

Они только псевдостандартные (они являются дополнительным расширением стандарта POSIX); они не совсем устарели, но стандарт POSIX считает их устаревшими и [рекомендует не использовать их] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html#tag_20_128_16). (Они по существу поддерживаются по историческим причинам.) – chepner

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