Сортировка файла с разделением табуляцией

Используйте vim-bindings в командной строке в bash:

    set -o vi

В других программах, использующих readline, нажмите control-alt-j, чтобы переключиться с emacs на привязки vim.

168
задан codeforester 20 March 2018 в 04:50
поделиться

4 ответа

Используя bash , это поможет:

$ sort -t$'\t' -k3 -nr file.txt

Обратите внимание на знак доллара перед строкой в ​​одинарных кавычках. Вы можете прочитать о его можно найти в разделах ANSI-C Quiting bash справочной страницы .

297
ответ дан 23 November 2019 в 20:55
поделиться

По умолчанию разделитель полей непустой для перехода к пустому, поэтому табуляция должна работать нормально.

Однако столбцы имеют индекс с базой 1 и базой 0, поэтому вы, вероятно, захотите

sort -k4nr file.txt

для сортировки file.txt по столбцу 4 в обратном порядке. (Хотя данные в вопросе содержат даже 5 полей, поэтому последним полем будет индекс 5.)

10
ответ дан 23 November 2019 в 20:55
поделиться

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

Решение вашей проблемы очень просто на языке сценариев, таком как Perl, Python или Ruby. Вот пример кода:

#!/usr/bin/perl -w

use strict;

my $sort_field = 2;
my $split_regex = qr{\s+};

my @data;
push @data, "7 8\t 9";
push @data, "4 5\t 6";
push @data, "1 2\t 3";

my @sorted_data = 
    map  { $_->[1] }
    sort { $a->[0] <=> $b->[0] }
    map  { [ ( split $split_regex, $_ )[$sort_field], $_ ] }
    @data;

print "unsorted\n";
print join "\n", @data, "\n";
print "sorted by $sort_field, lines split by $split_regex\n";
print join "\n", @sorted_data, "\n";
1
ответ дан 23 November 2019 в 20:55
поделиться

пропустите его через что-то вроде awk '{print print $ 1 "\ t" $ 2 "\ t" $ 3 "\ t" $ 4 "\ t" $ 5}' . Это изменит пробелы на табуляцию.

1
ответ дан 23 November 2019 в 20:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: