Add string to middle of a file


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Add string to middle of a file
# 1  
Old 06-14-2006
Add string to middle of a file

Hi,

I want to write a script that takes a file and a string as params and adds the string to the middle line of the file. Also, I want to output the results back to the original file passed without using temp files.

I am very much new to UNIX so this is all a little like black magic to me at the moment but heres what I was thinking:

#Get the number of lines in the file
MyVar="`wc -w NewFile | awk '{print $1}'`"

#Get The middle of the file
Middle=$ expr $MyVar / 2

#Add Line to middle of file

????

Here my problems, I think i should be using sed but I am not sure about the syntax.

Another way I thought was to use awk to scan through each line of the file and hold it as an array. Then output the first half of the array to the file, then the input string, then the remaining part of the array. Problem here is that I dont know how to pass a string to an awk script. Is this possible?

Thanks, Chris.
# 2  
Old 06-14-2006
Example working code:
Code:
#!/bin/sh
text="Text to add"
file=data.txt

lines=`wc -l $file | awk '{print $1}'`

middle=`expr $lines / 2`

# If the file has an odd number of lines this script adds the text
# after the middle line. Comment this block out to add before
if [ `expr $lines % 2` -eq 1 ]
then
  middle=`expr $middle + 1`
fi

sed -e "${middle}a $text" $file

# 3  
Old 06-14-2006
Thanks

Hi Unbeliever,

Thanks for your help, and yes your right about correctly determining the middle of the file.

One thing though, could you please explain the syntax of the sed example. I get most of it:

sed -e "${middle}a $text" $file

-e = editing the original file.
${middle} = the line number

But whats the a afterwards all about?
Thanks, Chris.
# 4  
Old 06-14-2006
My example doesn't actually edit the file directly, it simply prints the original text file with the added line. But to answer your question.

sed -e "${middle}a $text" $file

-e: next argument is the sed command to use
${middle} is of course the line number of the original file to work on
a means append the following text

So all in all it mean append the text '$text' at line $middle in the file $file.
# 5  
Old 06-14-2006
So I am assuming:

sed -e "${middle}a $text" $file > $file

will ammend the file, no?
# 6  
Old 06-14-2006
I keep getting this error when i try to run the script:

sed: -e expression #1, char 3: Extra characters after command
# 7  
Old 06-14-2006
Try this:
Code:
sed ${mid}i'\
Your Text' yourfile

 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Views How to replace a CRLF char from a variable length file in the middle of a string in UNIX?

My sample file is variable length, with out any field delimiters. It has min of 18 chars length and the 'CRLF' is potentially between 12-14 chars. How do I replace this with a space? I still want to keep end of record, but just want to remove these new lines chars in the middle of the data. ... (7 Replies)
Discussion started by: chandrath
7 Replies

2. UNIX for Dummies Questions & Answers

Map a string in a the middle of a record

Hi Folks! I hope you can help me figure this out. I need to print a record which contains the contents of a config file. The contents of the config file should be found within the 21st and the 30th position of the fixed width reference file. Config File: aaaa bbbb cccc Reference... (3 Replies)
Discussion started by: kokoro
3 Replies

3. Linux

Remove newline in middle of string

my file input is with tab as delimiter, and in every line, there would be a skip of line with an unexcepted newline breaker. I'd like to remove this \n and put the information in the same line. INPUT a1 b1b2 c1 c2 d1 a2 b3 c3 d4 OUTPUT a1 b1b2 c1c2 ... (9 Replies)
Discussion started by: kinkichin
9 Replies

4. UNIX for Dummies Questions & Answers

Splitting a string and putting another string in the middle?

Hello all! I'm trying to put together a small script that will take in a file name and attach a datestamp to the end of it (but before the file type extension). To illustrate... Before: filename.txt anotherfilename.txt After: filename_20090724.txt anotherfilename_20090724.txt ... (7 Replies)
Discussion started by: jisoo411
7 Replies

5. Shell Programming and Scripting

stripping certain characters in at the middle of a string

I am trying to strip out certain characters from a string on both (left & right) sides. For example, line=see@hear|touch, i only want to echo the "hear" part. Well i have tried this approach: line=see@hear|touch templine=${line#*@} #removed "see@" echo ${templine%%\|*} #removed... (4 Replies)
Discussion started by: mcoblefias
4 Replies

6. Shell Programming and Scripting

Script to add a single line to middle of text file.

I've got a configuration file that is filled with xml text statements for example: <...../> <...../> <...../> <data id="java-options" value="-server -Djava.security.policy..../> <...../> <...../> <...../> I want to write a korn shell script that will go to this specific line and add a... (2 Replies)
Discussion started by: progkcp
2 Replies

7. Shell Programming and Scripting

add text in the middle of file

Can anyone help me pls? I want to add a text into the middle of file. I've writtenthe following script text to add="$1" file="$2" lines=$(wc -l $2) half_lines=$(expr $lines / 2) head -$half_lines $2 > temp echo "text to add" >> temp ((half_lines=$half_lines + 1)) tail -$half_lines $2... (6 Replies)
Discussion started by: relle
6 Replies

8. Shell Programming and Scripting

add a string in the middle of the file

i want to add a string in a very top of a file without using VI or SED or AWK this is what ive done: (echo '0a'; echo 'LINE OF TEXT'; echo '.'; echo 'wq') | ed -s myfile to add astrng right in the middle i could have count the lines of the file and just chenge the address. ... (6 Replies)
Discussion started by: ciroredz
6 Replies

9. Shell Programming and Scripting

Problem to add the string(without sed & awk) into the middle of file

Hi, I have tried many times to add the string into the first line of the file or the middle of the file but could not find the solution. I first tried by $echo "paki" >> file This code only append paki string at the end of file "file" but how can i add this "paki" into the first line or... (5 Replies)
Discussion started by: ali hussain
5 Replies

10. Shell Programming and Scripting

Add Lines in middle of file

I need to add a new lines with certain data, to an existing file, every 5 lines in the file. There is no way to find any distinct charater pattern so I will have to do a line count and then insert the new line. I think using awk or sed is what I need to do. Any help is appreciated. Kunder (2 Replies)
Discussion started by: kunder
2 Replies
Login or Register to Ask a Question