vincy
vincy

Reputation: 7739

How to append output to the end of a text file

How do I append the output of a command to the end of a text file?

Upvotes: 765

Views: 945692

Answers (13)

Eng_Farghly
Eng_Farghly

Reputation: 3017

In Linux, You can use cat command to append file content to another file

cat fileName_1.txt >> fileName_2.txt

In the previous command you will append content of fileName_1.txt to fileName_2.txt.

In Windows OS you can use type command

type fileName_1.txt >> fileName_2.txt

See this gif image:

enter image description here

Upvotes: 7

Leon S.
Leon S.

Reputation: 3687

While all of these answers are technically correct that appending to a file with >> is generally the way to go, note that if you use this in a loop when for example parsing/processing a file and append each line to the resulting file, this might be much slower then you would expect.

A faster alternative might be this:

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

WARNING: you are reading all lines into memory; memory is a limited resource, so don't go doing this for gigantic files.

Upvotes: 1

Saurav Sahu
Saurav Sahu

Reputation: 13974

I often confuse the two. Better to remember through their output:

> for Overwrite

$ touch someFile.txt
$ echo ">" > someFile.txt
$ cat someFile.txt
  >
$ echo ">" > someFile.txt
$ cat someFile.txt
  >

>> for Append

$ echo ">" > someFile.txt
$ cat someFile.txt
  >
$ echo ">" >> someFile.txt
$ cat someFile.txt
  >>

Upvotes: 24

yoctotutor.com
yoctotutor.com

Reputation: 5511

To append a file use >>

echo "hello world"  >> read.txt   
cat read.txt     
echo "hello siva" >> read.txt   
cat read.txt

then the output should be

hello world   # from 1st echo command
hello world   # from 2nd echo command
hello siva

To overwrite a file use >

echo "hello tom" > read.txt
cat read.txt  

then the out put is

hello tom

Upvotes: 181

craft
craft

Reputation: 2135

Use command >> file_to_append_to to append to a file.

For example echo "Hello" >> testFile.txt

CAUTION: if you only use a single > you will overwrite the contents of the file. To ensure that doesn't ever happen, you can add set -o noclobber to your .bashrc.

This ensures that if you accidentally type command > file_to_append_to to an existing file, it will alert you that the file exists already. Sample error message: file exists: testFile.txt

Thus, when you use > it will only allow you to create a new file, not overwrite an existing file.

Upvotes: 60

victortv
victortv

Reputation: 8942

Using tee with option -a (--append) allows you to append to multiple files at once and also to use sudo (very useful when appending to protected files). Besides that, it is interesting if you need to use other shells besides bash, as not all shells support the > and >> operators

echo "hello world" | sudo tee -a output.txt

This thread has good answers about tee

Upvotes: 55

Braden Holt
Braden Holt

Reputation: 1594

I would use printf instead of echo because it's more reliable and processes formatting such as new line \n properly.

This example produces an output similar to echo in previous examples:

printf "hello world"  >> read.txt   
cat read.txt
hello world

However if you were to replace printf with echo in this example, echo would treat \n as a string, thus ignoring the intent

printf "hello\nworld"  >> read.txt   
cat read.txt
hello
world

Upvotes: 16

Mangesh Bhapkar
Mangesh Bhapkar

Reputation: 401

For example your file contains :

 1.  mangesh@001:~$ cat output.txt
    1
    2
    EOF

if u want to append at end of file then ---->remember spaces between 'text' >> 'filename'

  2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt 
    1
    2
    EOF
    somthing to append

And to overwrite contents of file :

  3.  mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
    somthing new to write

Upvotes: 8

aioobe
aioobe

Reputation: 421170

Use >> instead of > when directing output to a file:

your_command >> file_to_append_to

If file_to_append_to does not exist, it will be created.

Example:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world

Upvotes: 992

sballmer
sballmer

Reputation: 122

I'd suggest you do two things:

  1. Use >> in your shell script to append contents to particular file. The filename can be fixed or using some pattern.
  2. Setup a hourly cronjob to trigger the shell script

Upvotes: 7

clt60
clt60

Reputation: 63972

for the whole question:

cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt

this will append 720 lines (30*24) into o.txt and after will rename the file based on the current date.

Run the above with the cron every hour, or

while :
do
    cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
    sleep 3600
done

Upvotes: 15

walta
walta

Reputation: 3466

You can use the >> operator. This will append data from a command to the end of a text file.

To test this try running:

echo "Hi this is a test" >> textfile.txt

Do this a couple of times and then run:

cat textfile.txt

You'll see your text has been appended several times to the textfile.txt file.

Upvotes: 81

Nev Stokes
Nev Stokes

Reputation: 9809

Use the >> operator to append text to a file.

Upvotes: 28

Related Questions