Sanathana
Sanathana

Reputation: 284

Combine multiple lines of text documents into one

I have thousands of text documents and they have varied number of lines of texts. I want to combine all the lines into one single line in each document individually. That is for example:

abcd 
efgh 
ijkl

should become as

abcd efgh ijkl 

I tried using sed commands but it is quite not achieving what I want as the number of lines in each documents vary. Please suggest what I can do. I am working on python in ubuntu. One line commands would be of great help. thanks in advance!

Upvotes: 0

Views: 1538

Answers (3)

user3065349
user3065349

Reputation: 171

assuming all your files are in one directory,have a .txt extension and you have access to a linux box with bash you can use tr like this:

for i in *.txt ; do tr '\n' ' ' < $i > $i.one; done

for every "file.txt", this will produce a "file.txt.one" with all the text on one line.

If you want a solution that operates on the files directly you can use gnu sed (NOTE THIS WILL CLOBBER YOUR STARTING FILES - MAKE A BACKUP OF THE DIRECTORY BEFORE TRYING THIS):

sed  -i -n 'H;${x;s|\n| |g;p};' *.txt

If your files aren't in the same directory, you can used find with -exec:

find . -name "*.txt" -exec YOUR_COMMAND \{\} \;

If this doesn't work, maybe a few more details about what you're trying to do would help.

Upvotes: 0

Bee Smears
Bee Smears

Reputation: 803

If you place your script in the same directory as your files, the following code should work.

import os
count = 0
for doc in os.listdir('C:\Users\B\Desktop\\newdocs'):
    if doc.endswith(".txt"):
        with open(doc, 'r') as f:
            single_line = ''.join([line for line in f])
            single_space = ' '.join(single_line.split())

        with open("new_doc{}.txt".format(count) , "w") as doc:
            doc.write(single_space)
        count += 1
    else:
        continue

@inspectorG4dget's code is more compact than mine -- and thus I think it's better. I tried to make mine as user-friendly as possible. Hope it helps!

Upvotes: 1

shx2
shx2

Reputation: 64388

Using python wouldn't be necessary. This does the trick:

% echo `cat input.txt` > output.txt

To apply to a bunch of files, you can use a loop. E.g. if you're using bash:

for inputfile in /path/to/directory/with/files/* ; do
    echo `cat ${inputfile}` > ${inputfile}2
done

Upvotes: 1

Related Questions