Как вывести содержимое текстового файла с пронумерованными строками?
@Sergey, вы, вероятно, не поверите, но для unix-пользователя подобная «задача» — это уровень (условно говоря) «детского сада». одним словом: примитив.
22 ноя 2016 в 20:46
Спасибо помогли) find -name ‘*txt’ | xargs wc -w | sort -g | head -n 1 | xargs cat -n
23 ноя 2016 в 11:34
@Sergey, годный троллинг.
28 ноя 2016 в 21:34
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
варианты выдачи содержимого файла или потока с пронумерованными строками:
-
nl
- Бот на Python, использующий ChatGPT для Telegram
- Установка Docker на Ubuntu 22.04
- Установка Docker Compose v2 на Ubuntu 22.04
- Версия бота с запоминаем контекста общения (Необязательно).
- Установка Docker на Ubuntu 22.04
- Установка Docker Compose v2 на Ubuntu 22.04
- Вопрос задан более трёх лет назад
- 1686 просмотров
- Linux
- +1 ещё
- 1 подписчик
- час назад
- 68 просмотров
-
содержимое указанного файла:
$ nl файл
$ какие-то команды | nl
$ cat -n файл
$ какие-то команды | cat -n
$ less -N файл
$ какие-то команды | less -N
$ awk '< print FNR " " $0 >' файл
$ какие-то команды | awk '< print FNR " " $0 >'
$ perl -pe '$_ = "$. $_"' файл
$ какие-то команды | perl -pe '$_ = "$. $_"'
у вас, как я понял, весь поток заканчивается выдачей имени файла. чтобы применить к нему любую из перечисленных команд, надо воспользоваться программой xargs , которой вы уже пользовались. например, передать это имя программе nl можно так:
$ команды возвращающие имя файла | xargs nl
Как вывести содержимое файла proghub txt
![]()
Бот на Python с ChatGPT: Докеризация и деплой на VPS [Гайд]
02 апреля 2023
Оценки статьи
Еще никто не оценил статью
В данной статье мы научимся упаковывать нашего бота с ChatGPT на основе aiogram с помощью Docker-контейнера и запустим его на виртуальном сервере в интернете, чтобы он был доступен для использования 24/7 из любой точки мира.
Если вы хотите выразить благодарность автору сайта, статей и курса по Django, вы можете сделать это по ссылке ниже:
Статьи, которые вам необходимы перед изучением этой:
Напоминаю, что мы имеем следующий код бота chatGPT на aiogram (python)
import openai from aiogram import Bot, types from aiogram.dispatcher import Dispatcher from aiogram.utils import executor telegram_token = "Токен от телеграмм бота" openai.api_key = "Токен от OpenAI ChatGPT" bot = Bot(telegram_token) dp = Dispatcher(bot) @dp.message_handler() async def send(message : types.Message): response = openai.Completion.create( model="text-davinci-003", prompt=message.text, temperature=0.9, max_tokens=2000, top_p=1.0, frequency_penalty=0.0, presence_penalty=0.6) print(message.text) await message.answer(response['choices'][0]['text']) if __name__ == '__main__': executor.start_polling(dp, skip_updates=True)
Конфигурация Dockerfile для запуска бота на aiogram с нейросетью
Рядом с файлом main.py создаем файл Dockerfile, где мы будем билдить контейнер с Python для запуска проекта со следующим содержимым:
Dockerfile
FROM python:alpine ENV PYTHONUNBUFFERED=1 ENV PYTHONDONTWRITEBYTECODE=1 # Установим директорию для работы WORKDIR /telegram_bot COPY ./requirements.txt ./ # Устанавливаем зависимости и gunicorn RUN pip install --upgrade pip RUN pip install --no-cache-dir -r ./requirements.txt # Копируем файлы и билд COPY ./ ./ RUN chmod -R 777 ./
Эта конфигурация относится к созданию Docker-контейнера на основе образа Python Alpine, который используется для развертывания Python-приложения, в данном случае, телеграм-бота.
В первой строке указывается базовый образ python:alpine , который используется для создания контейнера. Alpine — это минималистичный дистрибутив Linux, который предлагает меньший размер и более быстрое время запуска контейнеров.
Далее, в строках ENV PYTHONUNBUFFERED=1 и ENV PYTHONDONTWRITEBYTECODE=1 определяются переменные среды. PYTHONUNBUFFERED устанавливает флаг для Python, чтобы он выводил данные в стандартный поток вывода без буферизации, а PYTHONDONTWRITEBYTECODE отключает создание .pyc-файлов, чтобы избежать проблем с обновлением кода в контейнере.
В строке WORKDIR /telegram_bot устанавливается рабочая директория в контейнере, куда будут копироваться все файлы проекта.
Далее, в строках COPY ./requirements.txt ./ и RUN pip install —no-cache-dir -r ./requirements.txt устанавливаются зависимости проекта. Сначала копируется файл requirements.txt в текущую директорию в контейнере, а затем запускается команда pip install , чтобы установить все зависимости проекта.
В строке COPY ./ ./ копируются все файлы проекта в рабочую директорию в контейнере.
Наконец, в строке RUN chmod -R 777 ./ устанавливается разрешение на чтение, запись и выполнение для всех файлов в рабочей директории проекта в контейнере. Это делается для того, чтобы приложение внутри контейнера имело необходимые права для чтения и записи в файлы.
В итоге, данная конфигурация создает Docker-контейнер, в котором установлены все необходимые зависимости для работы телеграм-бота на основе нейросети ChatGPT и задана правильная рабочая директория для запуска приложения.
Конфигурация docker-compose для запуска бота на aiogram с нейросетью
Далее нам необходимо сконфигурировать файл запуска нашего бота с нейросетью, для этого рядом с файлами Dockerfile и main.py создаем файл docker-compose.yml со следующим содержимым:
docker-compose.yml
version: "3.9" services: telegram-bot: container_name: telegram-bot working_dir: /telegram_bot restart: always build: context: . dockerfile: Dockerfile command: sh -c "python main.py"
Этот код описывает файл docker-compose.yml, который является инструментом для определения и запуска нескольких связанных контейнеров Docker в одном и том же процессе.
Строка version: «3.9» указывает на версию Docker Compose, которая используется для создания и управления контейнерами.
Блок services определяет сервисы, которые будут запущены в контейнерах Docker, в нашем случае, сервис с именем telegram-bot определяется в блоке services .
Строка container_name: telegram-bot задает имя контейнера Docker.
Строка working_dir: /telegram_bot устанавливает рабочую директорию в контейнере.
Строка restart: always задает автоматический перезапуск контейнера в случае его остановки.
Строка build указывает, что контейнер должен быть построен с использованием Dockerfile, находящегося в текущей директории.
Строка context: . указывает на текущую директорию как контекст для сборки.
Строка dockerfile: Dockerfile указывает на имя файла Dockerfile, который будет использоваться для сборки контейнера.
Строка command: sh -c «python main.py» указывает, что при запуске контейнера будет выполнен скрипт main.py с помощью Python, который находится в текущей директории. Команда sh -c используется для запуска нескольких команд в одном процессе shell.
Создание файла requirements.txt для зависимостей
И создадим ещё один файл зависимостей, находясь в нашем виртуальном окружении. Этот файл загрузит в наш билд необходимые библиотеки для работы бота. Для его создания в терминале нашего проекта с ботом введите следующую команду: pip freeze > requirements.txt
В нашем случае получится следующий файл, у вас могут быть версии поновее:
requirements.txt
aiogram==2.25.1 aiohttp==3.8.3 aiosignal==1.3.1 async-timeout==4.0.2 attrs==22.2.0 Babel==2.9.1 certifi==2022.12.7 charset-normalizer==2.1.1 colorama==0.4.6 frozenlist==1.3.3 idna==3.4 magic-filter==1.0.9 multidict==6.0.4 openai==0.26.4 pyTelegramBotAPI==4.10.0 pytz==2022.7.1 requests==2.28.2 tqdm==4.64.1 urllib3==1.26.14 yarl==1.8.2
Копируем telegram бота с ChatGPT на VPS
Далее нам необходимо скопировать эти 3 файла в директорию на виртуальном сервере. Я уже приобрел такой сервер, обычно я беру сервера на timeweb.
Установленная ОС: Ubuntu 22.04.
Чтобы скинуть файлы на сервер, нам необходим клиент для подключения по SSH, например FileZilla или WinSCP.
Я буду использовать FileZilla:

Обычно я все файлы выкладываю в папку /home/ на сервере. Сюда я их и скопирую, предварительно создав папку telegram_bot.

Далее перейдем к запуску. Мы должны будем подключиться через терминал по SSH протоколу на наш сервер.
Запускаем telegram бота с ChatGPT на VPS
Далее вам необходимо установить Docker на вашу ОС.
В начале статьи я уже оставил нужные уроки, по которым вам необходимо поставить Docker и Docker Compose. Ставятся они очень быстро без каких либо проблем.
Подключаемся по SSH к серверу и переходим в папку telegram_bot, подключаться можно через CMD на Windows 10/11, пишем следующую команду: ssh root@айпи_или_домен_сервера и чтобы попасть в папку telegram_bot: cd ../home/telegram_bot .

Далее нам остается лишь последнее, сбилдить проект и запустить его, вводим следующую команду для установки нашего билда с ботом: docker compose build

После окончания прогресса создания билда, мы запускаем его с помощью следующей команды: docker compose up

Проверка работы telegram-бота на aiogram с ChatGPT в Docker контейнере на VPS
Теперь я напишу своему боту что-нибудь:

На этом всё. Мы быстро развернули проект пошагово в Docker контейнере и проверили его работу. Как видите, я специально вывел функцию print() моих сообщений боту, чтобы наглядно вам показать работу с ботом на сервере.
Меню категорий
-
Загрузка категорий.
Как вывести содержимое из файла *.txt на страницу html с возможностью редактированияфайла?
Подскажите какими способами можно реализовать следующую задачу. Есть .txt файл с несколькими столбцами допустим 4 столбца и 40 строк. Для удобства работы нужно отобразить .txt файл в формате .html (или *.php) и преобразовать в таблицу (сама структура *.txt файла разбита на таблицу уже) как только все ячейки будут заполнены то в этой таблице нужно дописать еще столбец и добавить на каждую строку select option , (Да , нет) как только будут выполнены какие то действия нужно будет сохранить изменения на странице и в *.txt файле. теперь подскажите в какую сторону копать, столкнулся с работой файлов впервые.
Отслеживать
задан 11 окт 2016 в 11:53
380 1 1 золотой знак 5 5 серебряных знаков 25 25 бронзовых знаков
Читайте здесь php.net/manual/ru/book.filesystem.php PS. Насколько мне известно, данный портал не является местом для написания кода по вашему заказу! Другое дело, если бы у вас уже был самостоятельно написанный код и он работал не правильно.
13 окт 2016 в 4:53
@Uzgraph а я и не прошу писать за меня, мне интересно каким способом можно решить задачу.
13 окт 2016 в 9:35
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Основная идея состоит в том, чтобы прочитать файл, разбить строки на массив столбцов, из которых сгенерировать таблицу, а в конец каждой строки добавить необходимую опцию. В данном случае select лучше заменить на checkbox , я думаю.
Примерно это должно выглядеть вот так:
$columns = array("Column1", "Column2", "Column3", "Column4"); $file = "some.txt"; $separator = "\t"; $lines = 0; if ($_SERVER["REQUEST_METHOD"] === "POST") < $fh = fopen(str_replace(".txt", ".new.txt", $file), "w+"); while (isset($_POST[$columns[0]][$lines]) < $tmp = array(); foreach ($columns as $column) < $tmp[] = $_POST[$column][$lines]; >$tmp[] = empty($_POST["opt"][$lines]) ? "Нет" : $_POST["opt"][$lines]; fwrite($fh, implode($separator, $tmp) . "\n"); $lines++; > fclose($fh); > else < echo "; echo ""; echo "# "; foreach ($columns as $column) < printf("%s ", $column); > echo "Да / Нет "; foreach (file($file) as $line) < $tds = preg_split("#" . preg_quote($separator) . "+#", trim($line)); printf("%d ", $lines + 1); foreach (array_combine($columns, $tds) as $column => $td) < printf('', $column, $lines, htmlentities($td)); > printf(' ', $lines++); > echo '
'; >
Как вывести содержимое файла имея только команды echo и ls?
Суть такова. Имеется файл с названием -text.txt- (именно с — в начале и конце). Доступны только команды echo и ls, как можно вывести его содержимое?
P.S Файл создан рутом, команды выполняются юзером
2 комментария
Сложный 2 комментария

Хакер изнутри контейнера Докера?

Даша Циклаури @dasha_programmist
Роман Мирр, скоро глядишь появятся вакансии такие, с не менее идиотскими вопросами на собеседованиях
Решения вопроса 0
Ответы на вопрос 5
Веб-макаке не хватит и 640гБ
$ cat -- -text.txt- 123 $ echo "$(<-text.txt-)" 123
Ответ написан более трёх лет назад
Нравится 2 4 комментария

Файл создан рутом, команды выполняются юзером
А это учтено?
Роман Мирр, А оно было в изначальной версии вопроса?

Steven Konrov, полагаю что да. По крайней мере, есть только одна версия вопроса в истории изменеий.

Сергей delphinpro @delphinpro
Роман Мирр, правки автора не отражаются в истории
Saboteur @saboteur_kiev Куратор тега Linux
software engineer
echo $(<./-text.txt-)
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать

Сначала мы жили бедно, а потом нас обокрали..

echo ` <-text.txt-`
Хакер из меня так себе, но сработало:
-text.txt-`>
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

Стыдно за старые вопросы
Варианты выше правильные. Если вывести содержимое не получается, то может нужно изменить права доступа к файлу?
chmod 777 -text.txt- echo $(
Если есть исключительно echo и ls (без chmod), тогда невозможно(имхо).
UPD: Забыл что chmod делают от рута. Поэтому он не подходит.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Владелец файла неважен, важно наличие доступа. Если доступа на чтение нет, то это всё, приехали.
Так-то кратчайший вариант тут указали:
Но я думаю пользователя волновал именно минус в имени, а не наличие cat, и вот с этим побороться легко:
cat -- -text.txt- cat ./-text.txt-
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
