Рейтинг:0

bash: сортировать файлы по номеру внутри них

флаг us

Мне нужно сгенерировать 100 файлов .txt со случайным числом внутри каждого из них.Затем мне нужно переименовать файлы, чтобы имена файлов назывались от 1.txt до 100.txt в порядке возрастания на основе значения, которое хранится внутри каждого файла. В файле с именем 1.txt должно храниться наименьшее число, а в файле с именем 100.txt должно храниться наибольшее число.

Я пробовал этот код:

#!/бин/баш
для i в $(seq 1 100)
делать
эхо $ RANDOM > $ {i}.txt
сделано
кот *.txt | Сортировать
флаг us
Протестировал последний скрипт, но файлы не называются от 1.txt до 100.txt я ошибся?
karel avatar
флаг sa
Спасибо за разъяснение вашего вопроса. Я отредактировал последний скрипт, чтобы выходные файлы назывались от 1.txt до 100.txt, как вы просили.
флаг us
Спасибо за помощь!
karel avatar
флаг sa
Ваш вопрос теперь намного понятнее.
Рейтинг:0
флаг ar

Вы можете сначала сгенерировать все свои случайные числа, а затем отсортировать их перед записью в файлы:

для я в {1..100}; делать
    эхо $ RANDOM
сделано \
| сортировать -n \
| пока читал; делать
     ((х+=1))
     эхо "$n" > "$x.txt"
  сделано

Или то же самое, что и однострочный:

для я в {1..100}; эхо $ RANDOM; сделано | сортировать -n | пока читал; сделать (( х+=1 )); эхо "$n" > "$x.txt"; сделано

Отметим также, что иметь Сортировать сортировать строки чисел численно, вам нужно его --числовая сортировка (или же ) вариант.

Рейтинг:0
флаг sa

Создайте новый каталог и назовите каталог любым именем, которое вы выберете. Изменить каталоги с помощью CD в новый каталог, который вы создали, так что все файлы, созданные сценарием оболочки, будут созданы внутри нового каталога, и только эти вновь созданные файлы будут переименованы. Затем запустите следующий сценарий оболочки.

#!/бин/баш
для i в $(seq 1 100)
делать
echo $RANDOM > ${i}.txt # Поместите случайное число в каждый файл.
mv ${i}.txt $(head -1 ${i}.txt).txt # Переименуйте файлы.
сделано
лс *.txt | sort -n # Сортировать файлы по возрастанию.

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

#!/бин/баш
для i в $(seq 1 100)
делать
echo $RANDOM > ${i}.txt # поместите случайное число в каждый файл
mv ${i}.txt $(head -1 ${i}.txt).txt # переименовать файлы
сделано
# лс *.txt | sort -n # Я закомментировал эту строку и добавил после нее новую строку.
я=1; для имени файла в `ls *.txt | сортировать -n`; do mv "$filename" "$((i++)).txt"; сделано
Doug Smythies avatar
флаг gn
Вопрос похож на домашнее задание, и поэтому я думаю, что мы не должны давать ответ.
karel avatar
флаг sa
@DougSmythies Я сочувствую вам, но сообщество Ask Ubuntu за последние 10 лет единодушно считает, что сценарии оболочки bash обсуждаются в Ask Ubuntu, а задания по программированию на других языках программирования, включая домашние задания на других языках программирования, не по теме. Единственный выход — отправить запрос на обсуждение этого вопроса в Ask Ubuntu Meta. Я был бы рад принять любой консенсус сообщества Ask Ubuntu по этому вопросу.

Ответить или комментировать

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