Как добавить вывод в конец текстового файла

Как добавить вывод команды в конец текстового файла?

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

Я бы посоветовал вам сделать две вещи:

  1. использование >> в вашем сценарии оболочки, чтобы добавить содержимое к определенному файлу. Имя файла может быть исправлено или с использованием некоторого шаблона.
  2. Установите почасовой 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

ВНИМАНИЕ: вы читаете все строки в память; память - ограниченный ресурс, поэтому не делайте этого для гигантских файлов.

Другие вопросы по тегам