Как добавить вывод в конец текстового файла
Как добавить вывод команды в конец текстового файла?
13 ответов
Использование >>
вместо >
при направлении вывода в файл:
your_command >> file_to_append_to
Если file_to_append_to
не существует, оно будет создано.
Пример:
$ echo "hello" > file
$ echo "world" >> file
$ cat file
hello
world
К append
использование файла >>
echo "hello world" >> read.txt cat read.txt echo "hello siva" >> read.txt cat read.txt
тогда вывод должен быть
hello world hello siva
к overwrite
использование файла >
echo "hello tom" > read.txt cat read.txt
тогда выход
hello tom
Вы можете использовать оператор >>. Это добавит данные из команды в конец текстового файла.
Чтобы проверить это, попробуйте запустить:
echo "Hi this is a test" >> textfile.txt
Сделайте это пару раз, а затем запустите:
cat textfile.txt
Вы увидите, что ваш текст был добавлен несколько раз в файл textfile.txt.
Использование command >> file_to_append_to
добавить в файл.
Например echo "Hello" >> testFile.txt
ВНИМАНИЕ: если вы используете только один >
Вы полностью перезапишите содержимое файла. Чтобы этого никогда не происходило, вы можете добавить set -o noclobber
на ваш .bashrc
,
Это гарантирует, что если вы случайно наберете command > file_to_append_to
на существующий файл, он предупредит вас, что файл уже существует. Пример сообщения об ошибке: file exists: testFile.txt
Таким образом, когда вы используете >
это только позволит вам создать новый файл, а не перезаписать существующий файл.
Использование tee с опцией -a (--append) позволяет вам добавлять сразу несколько файлов, а также использовать sudo (очень полезно при добавлении в защищенные файлы). Кроме того, это интересно, если вам нужно использовать другие оболочки, кроме bash, поскольку не все оболочки поддерживают операторы> и >>.
echo "hello world" | sudo tee -a output.txt
В этой ветке есть хорошие ответы о футболке
Я часто путаю их. Лучше запомнить через их вывод:
> для перезаписи
$ touch someFile.txt
$ echo ">" > someFile.txt
$ cat someFile.txt
>
$ echo ">" > someFile.txt
$ cat someFile.txt
>
>> для добавления
$ echo ">" > someFile.txt
$ cat someFile.txt
>
$ echo ">" >> someFile.txt
$ cat someFile.txt
>>
На весь вопрос:
cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
это добавит 720 строк (30*24) в o.txt, а после переименует файл на основе текущей даты.
Запускайте вышеизложенное с помощью cron каждый час, или
while :
do
cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
sleep 3600
done
Я бы использовал printf вместо echo, потому что он более надежен и обрабатывает форматирование, например новую строку\n
должным образом.
Этот пример дает результат, аналогичный эхо в предыдущих примерах:
printf "hello world" >> read.txt
cat read.txt
hello world
Однако, если бы вы заменили printf на echo в этом примере, echo будет рассматривать \ n как строку, игнорируя намерение
printf "hello\nworld" >> read.txt
cat read.txt
hello
world
Я бы посоветовал вам сделать две вещи:
- использование
>>
в вашем сценарии оболочки, чтобы добавить содержимое к определенному файлу. Имя файла может быть исправлено или с использованием некоторого шаблона. - Установите почасовой cronjob для запуска сценария оболочки
Например, ваш файл содержит:
1. mangesh@001:~$ cat output.txt
1
2
EOF
если вы хотите добавить в конец файла, тогда ----> запомните пробелы между 'text' >> 'filename'
2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt
1
2
EOF
somthing to append
И перезаписать содержимое файла:
3. mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
somthing new to write
В Linux вы можете использоватьcat
команда для добавления содержимого файла в другой файл
cat fileName_1.txt >> fileName_2.txt
В предыдущей команде вы добавите содержимоеfileName_1.txt
кfileName_2.txt
.
В ОС Windows вы можете использоватьtype
команда
type fileName_1.txt >> fileName_2.txt
Смотрите эту гифку:
Хотя все эти ответы технически правильны, добавление к файлу с
>>
обычно это путь, обратите внимание, что если вы используете это в цикле, например, при анализе/обработке файла и добавляете каждую строку в результирующий файл, это может быть намного медленнее, чем вы ожидаете.
Более быстрая альтернатива может быть такой:
stringBuilder=""
while read -r line; do
# $'\n' prints a newline so we don't have to know what special chars the string contains
stringBuilder+="$line"$'\n'
done < "myFile.txt"
echo "$stringBuilder" > $file
ВНИМАНИЕ: вы читаете все строки в память; память - ограниченный ресурс, поэтому не делайте этого для гигантских файлов.