Попробуйте это! 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")
ls data_* | sort -n -t _ -k 2
-n: числовая сортировка
-t: разделитель полей '_'
-k: сортировка по второму полю, в вашем случае числа после первого '_'
Если ваш sort
имеет сортировку версий, попробуйте:
ls -1 | sort -V
(это заглавная V).
может быть, вам понравится 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
Это общий ответ! Вы должны применить правила к определенному набору данных
ls | sort
Пример:
ls | sort -n -t _ -k 2
Одно предложение, которое я могу придумать, это:
for i in `seq 1 5`
do
cat "data_${i}_box"
done
Как насчет использования флага -v
для ls
? Цель флага - сортировать файлы по номеру версии, но здесь он работает так же хорошо и устраняет необходимость передавать результат в sort
:
ls -lv data_*
Вот способ сделать это в 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.