Bash сортировать по регулярному выражению - PullRequest
7 голосов
/ 30 декабря 2011

У меня есть что-то около 100 файлов со следующим синтаксисом

ahfsdjfhdfhj_EPI_34_fdsafasdf
asdfasdf_EPI_2_fdsf
hfdjh_EPI_8_dhfffffffffff
ffffffffffasdfsdf_EPI_1_fyyy44

...

Всегда есть EPI_NUMBER.Как я могу отсортировать по этому номеру?

Ответы [ 4 ]

10 голосов
/ 30 декабря 2011

Из вашего примера видно, что разделитель равен _, а текст EPI_nnn находится в той же позиции после разделителя _.Если это всегда так, вы можете использовать следующую команду для сортировки файла:

sort -n -t "_" -k 3 file.txt

ОБНОВЛЕНИЕ:

Если позиция EPI_ текста не является исправлено , затем используйте следующую команду оболочки:

sed 's/^\(.*EPI_\)\(.*\)$/\2##\1/' file.txt | sort -n -t "_" -k1 | sed 's/^\(.*\)##\(.*\)$/\2\1/'
4 голосов
/ 30 декабря 2011

Если с Perl все в порядке, вы можете:

print sort foo <>;    
sub foo {
        ($x = $a) =~s/.*EPI_(\d+).*/$1/;
        ($y = $b) =~s/.*EPI_(\d+).*/$1/;
        return $x <=> $y;
}

и используйте его как:

perl prg.pl inputfile

Смотри

3 голосов
/ 30 декабря 2011
 sed -e 's/EPI_/EPI /' file1 file2 ...|sort -n -k 2 -t ' '

Передайте sed -e 's/ /_/', чтобы вернуть исходную форму.

1 голос
/ 30 декабря 2011

Это может работать для вас:

 ls | sed 's/.*EPI_\([0-9]*\)/\1 &/' | sort -n | sed 's/\S* //'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...