Bash и сортировать файлы по порядку

Попробуйте это! sublist y не пропускает последовательность списка x.

x = list

y = подписок

if ([i for i,j in enumerate(y) for k,l in enumerate(x) if i == k and j!=l]):
    print("True")
else:
    print("False")
29
задан Dennis Williamson 17 November 2009 в 07:03
поделиться

7 ответов

ls data_* | sort -n -t _ -k 2

-n: числовая сортировка
-t: разделитель полей '_'
-k: сортировка по второму полю, в вашем случае числа после первого '_'

61
ответ дан Puppe 17 November 2009 в 07:03
поделиться

Если ваш sort имеет сортировку версий, попробуйте:

ls -1 | sort -V

(это заглавная V).

8
ответ дан Dennis Williamson 17 November 2009 в 07:03
поделиться

может быть, вам понравится SistemaNumeri.py («исправить номера»): он переименовывает ваш

data_1_box
data_2_box
...
data_10_box
...
data_99_box

в

data_01_box
data_02_box
...
data_10_box
...
data_99_box
1
ответ дан Vito De Tullio 17 November 2009 в 07:03
поделиться

Это общий ответ! Вы должны применить правила к определенному набору данных

ls | sort

Пример:

ls | sort -n -t _ -k 2
2
ответ дан Peter Lindqvist 17 November 2009 в 07:03
поделиться

Одно предложение, которое я могу придумать, это:

for i in `seq 1 5`
do  
   cat "data_${i}_box"
done
0
ответ дан Saravanan 17 November 2009 в 07:03
поделиться

Как насчет использования флага -v для ls? Цель флага - сортировать файлы по номеру версии, но здесь он работает так же хорошо и устраняет необходимость передавать результат в sort:

ls -lv data_*
20
ответ дан Pär Wieslander 17 November 2009 в 07:03
поделиться

Вот способ сделать это в bash, если у вашего вида нет сортировки версий:

cat <your_former_ls_output_file> | awk ' BEGIN { FS="_" } { printf( "%03d\n",$2) }' | sort | awk ' { printf( "data_%d_box\n", $1)  }'

Все в одной строке. Имейте в виду, я не проверял это на ваших конкретных данных, поэтому может потребоваться небольшая настройка для правильной работы для вас. Это обрисовывает в общих чертах хорошее, надежное и относительно простое решение, все же. Конечно, вы всегда можете поменять имя файла cat + в начале на фактическое значение ls, чтобы создать данные файла на лету. Для захвата фактического столбца имени файла вы можете выбрать между правильными параметрами ls или передачей через cut или awk.

1
ответ дан Willy-André Daniel 17 November 2009 в 07:03
поделиться
Другие вопросы по тегам:

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