Redirect output to the same input file in awk


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Redirect output to the same input file in awk
# 8  
Old 02-25-2015
Ravinder, I do not want to send the o/p in a seprate file. since I should test in sysctl.conf file
# 9  
Old 02-25-2015
Hello Stew,

If I understood you correctly you are trying to take OUTPUT or EDIT the same file which is being used for input as well, then I can say there no option present in awk to do so. You can create a script and execute like following.
Code:
cat script.ksh
awk '/kernel.sem/ { if ($3 < "300") { sub($3,"300",$0); print >> "/tmp/test1" } else {print >> "/tmp/test1" }}' ACTUAL_FILE
mv /tmp/test1 ACTUAL_FILE

Hope this helps.

Thanks,
R. Singh
# 10  
Old 02-25-2015
you are correct. I want to edit the same file which being used for i/p file and update the o/p in the same i/p file.

My requirement is, need to edit kernel.sem values from sysctl.conf file. So I can't move the file name since the sysctl file is very sensitive.

Do you know any other option.
# 11  
Old 02-25-2015
Hello Stew,

Could you please try the same and let me know if this helps, kindly try the same first with same details a test file
and if All is Well then you can try with actual file too.
Code:
cat script.ksh
VALUE=`awk '/kernel\.sem/ {if($3 < 300){print 1}}' Input_file`
if [[ $VALUE -eq 1 ]]
then
 sed -i '/kernel.sem/s/\(.*= \)\(...\)\(.*\)/\1 300 \3/g' Input_file
else
 echo "Values are fine nothing to do."
fi

Hope this helps.

Thanks,
R. Singh

Last edited by RavinderSingh13; 02-25-2015 at 05:41 AM..
This User Gave Thanks to RavinderSingh13 For This Post:
# 12  
Old 02-25-2015
I will try this . Thanks a lot for your help Smilie
# 13  
Old 02-25-2015
Hi,
Example standard procedure (here bash and awk):
Script:
Code:
$ cat script.bash
#!/usr/bin/bash

exec 3<demosysctl.conf
rm demosysctl.conf
awk '/kernel.sem/ { if ($3 < "300") { sub($3,"300",$0); print } ;next }1' <&3 >demosysctl.conf

Input:
Code:
$ cat demosysctl.conf
kernel.sem = 250   32000   32      128250
kernel.small = 1612364
kernel.shmmax = 2147483648

Execution:
Code:
$ ./script.bash
$ cat demosysctl.conf
kernel.sem = 300   32000   32      128250
kernel.small = 1612364
kernel.shmmax = 2147483648

Regards.
# 14  
Old 02-25-2015
Quote:
Originally Posted by anbu23
Code:
awk '{ if ($1 < "300") { sub($1,"300",$0); print > "/tmp/test" } }' /tmp/test

This is extremely dangerous code. Depending on the size of the input file and the location of the line being modified in the file, this may truncate your input file to size zero instead of updating a field in one or more lines in the file.

NEVER, try to read and write a file that might be larger than the size of the 1st read performed by awk or you will destroy your input file. (And, since there is no requirement placed on awk for the sizes of the reads it performs, NEVER, NEVER, NEVER do this.)

Using sed -i to update a system configuration file could also leave you with an unbootable system if your system loses power in the middle of an update. Ranvinder's suggestion in post #9 is much safer (using a temp file and moving or copying the updated file after it has been fixed), but it should verify that the awk command returned a zero exit status before attempting the mv on the next line.

However, it would be much better to create the temp file in the same directory as the file being updated (same filesystem is sufficient, but in case more file systems are created in the future, same directory is safer), so the mv is just a rename() which will always leave you with either the original configuration file or the updated configuartion file in place. (Of course, any change to a file could be corrupted by a disk block or controller going bad while you're making the update; but this method eliminates several other error cases that could destroy your data.)
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk to reformat output if input file is empty, but not if file has data in it

The below awk improved bu @MadeInGermany, works great as long as the input file has data in it in the below format: input chrX 25031028 25031925 chrX:25031028-25031925 ARX 631 18 chrX 25031028 25031925 chrX:25031028-25031925 ARX 632 14... (3 Replies)
Discussion started by: cmccabe
3 Replies

2. UNIX for Dummies Questions & Answers

awk - Rename output file, after processing, same as input file

I have one input file ABC.txt and one output DEF.txt. After the ABC is processed and created output, I want to rename ABC.txt to ABC.orig and DEF to ABC.txt. Currently when I am doing this, it does not process the input file as it cannot read and write to the same file. How can I achieve this? ... (12 Replies)
Discussion started by: High-T
12 Replies

3. Shell Programming and Scripting

Read file from input and redirect to output file

Hi , i am having an file which contains 5 file_name data, i need to read the file name and will perform certain operation and generate out file names with named as 5 individual file_names for eg: file.txt contains file_name1.txt|hai file_name2.txt|bye file_name3.txt|how... (3 Replies)
Discussion started by: rohit_shinez
3 Replies

4. Shell Programming and Scripting

AWK Script to convert input file(s) to output file

Hi All, I am hoping someone can help me with some scripting I need to complete using AWK. I'm trying to process multiple fixed files to generate one concatenated fixed file in a standard format. The Input file is:- aaaa bbbbb ccccc 1 xxxx aaa bbb aaaa bbbbb ccccc 2 abcd aaa CCC... (9 Replies)
Discussion started by: jason_v_brown
9 Replies

5. UNIX for Advanced & Expert Users

Complex Input/Output Redirect

Hi All, Sorry if the title is not good but I did not know how to explain with only some words! What I meant is: I have a unix command built from a private application vendor that when executed it prompts for two entries by the keyboard, let's say, for example: ... (1 Reply)
Discussion started by: felipe.vinturin
1 Replies

6. Shell Programming and Scripting

redirect an awk string output to a script input with pipes

Hi, I have a function in a bash script that returns a string after some operations using awk. The following code returns 555 $VARIABLE="EXAMPLE" get_number $VARIABLE this value I'd like to pass it as a second argument of another script with the following usage myscript.sh <param1>... (7 Replies)
Discussion started by: rid
7 Replies

7. Programming

Redirect input and output to a shell script?

Dear All: I am trying to do something that (I thought) was relatively straightforward, but my code snippet does not seem to work. Any suggestions? Thank you Sincerely yours Misha Koshelev #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include... (0 Replies)
Discussion started by: misha680
0 Replies

8. Shell Programming and Scripting

Pass input and output file as parameter to awk script

Hi, i am new to awk. I am using csv2pipe script(shown below) BEGIN { FS=SUBSEP; OFS="|" } { result = setcsv($0, ",") print } # setcsv(str, sep) - parse CSV (MS specification) input # str, the string to be parsed. (Most likely $0.) # sep, the separator between the values. # #... (6 Replies)
Discussion started by: bhaskarjha178
6 Replies

9. Shell Programming and Scripting

awk should output if one input file doesnt have matching key

nawk -F, 'FNR==NR{a= $3 ;next} $2 in a{print $1, 'Person',$2, a}' OFS=, filea fileb Input filea Input fileb output i am getting : (2 Replies)
Discussion started by: pinnacle
2 Replies

10. Shell Programming and Scripting

Input file redirect in output path and want name as inputfilename_new.txt

not required this time (6 Replies)
Discussion started by: Sandeep_Malik
6 Replies
Login or Register to Ask a Question