Find and substitute if greater than.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Find and substitute if greater than.
# 1  
Old 05-05-2014
Find and substitute if greater than.

I have large config-files for an application. The lines have different structure, but some of them contains the parameter 'TIMEOUT=x', where x is an numeric value. I want to change the value for that specific paramater if the value is greater than a specific value (got that?). The timeout-parameter can be at different positions on different lines.

Example:

The file could look something like this:

Code:
# comment
KEYWORD=value KEYWORD="textstring"
KEYWORD        value,value,value TIMEOUT=400
KEYWORD=value KEYWORD=value TIMEOUT=200 KEYWORD=value
# Another comment
KEYWORD=value TIMEOUT=100

And I want to change the TIMEOUT-value to 200 if the value is greater than 200. The result should look like this:

Code:
# comment
KEYWORD=value KEYWORD="textstring"
KEYWORD        value,value,value TIMEOUT=200
KEYWORD=value KEYWORD=value TIMEOUT=200 KEYWORD=value
# Another comment
KEYWORD=value TIMEOUT=100

I know I can do this in a for-loop over all lines in the file, grep'ing and awk'ing out the value, echo'ing a new line in an if-else based on the value. The problem is that there are about 100 files with around 10000 lines each and it will take too long time to run a shell-loop.

Does anyone have any intelligent solution for this in awk or similar?
# 2  
Old 05-05-2014
May be this?

Code:
$ awk -F= '/TIMEOUT=[0-9]+$/ && $NF > 200 {$NF=300}1' OFS== file
# comment
KEYWORD=value KEYWORD="textstring"
KEYWORD        value,value,value TIMEOUT=300
KEYWORD=value KEYWORD=value TIMEOUT=200 KEYWORD=value
# Another comment
KEYWORD=value TIMEOUT=100

Note: Pattern matching is purely based on the sample provided.
# 3  
Old 05-05-2014
Code:
awk '{for(i = 1; i <= NF; i++)
  {if($i ~ /^TIMEOUT=[0-9]*$/)
    {gsub(/[^0-9]/, X, $i)
    if($i > 200)
      $i = "TIMEOUT=200"
    else
      $i = ("TIMEOUT=" $i)}}}1' file

perl solution
Code:
perl -lane 'for(@F)
  {if($_ =~ /^TIMEOUT=[0-9]*$/)
    {s/TIMEOUT=//;
    if($_ > 200)
      {$_ = "TIMEOUT=200"}
    else
      {$_ = "TIMEOUT=" . $_}}} print "@F"' file

# 4  
Old 05-05-2014
Try also
Code:
awk     'match ($0, /TIMEOUT=[0-9]+/) &&
           substr($0, RSTART+8, RLENGTH-8) > 200        {$0=substr($0,1,RSTART+7) "200" substr($0, RSTART+RLENGTH) }
         1
        ' file

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Find command size greater than or equalto

How do I find the files greater than or equal to a given size using find command. find ./ -size +0k --> Lists files greater than 0K find ./ -size 0k --> Lists the file size equal to 0K. I have other conditions to check, hence using find command. Thanks in advance. (4 Replies)
Discussion started by: deepakwins
4 Replies

2. Shell Programming and Scripting

Help me to find a greater than or smaller than values

Hi, i need to find one of the value from my file is in between two numbers, that is the value is greater than 34 and smaller than 50, Ex: File.txt col1 col2 col3 col4 1 Name1 93 w 2 Name2 94 a 3 Name3 32 b 4 Name4 45 x 5 Name5 50 y 6 Name6 49 z here i need to find col3 values are... (7 Replies)
Discussion started by: Shenbaga.d
7 Replies

3. UNIX for Dummies Questions & Answers

Find and substitute a string

Hi, I started exploring unix recently. Now i have got a requirement like i have a input file where i am having some strings line by line (One string Might be single line or multiple lines). Now i need find these strings in another file and if its found i have to replace it with another string... (2 Replies)
Discussion started by: Sivajee
2 Replies

4. Shell Programming and Scripting

awk to substitute third column if first column is greater than interest

A file 2400 2800 PSC000289 3200 3896 PCS000289 3333 3666 PCS000221 222 1000 PCS000222 3299 3600 PSC000289 Question is while if third column is PCS000289 and first column should be greater than 3000, then replace PCS000289 by YES, remaining the others column same. ... (1 Reply)
Discussion started by: cdfd123
1 Replies

5. Shell Programming and Scripting

Find files greater than a particular date in filename.

I need a unix command which will find all the files greater that a particular date in the file name. say for example I have files like(filenaming cov : filename.YYDDMMSSSS.txt) abc.201206015423.txt abc.201207013456.txt abc.201202011234.txt abc.201201024321.txt efg.201202011234.txt... (11 Replies)
Discussion started by: lijjumathew
11 Replies

6. Shell Programming and Scripting

find greater than value

Hi I want to find greater than and min value. dategrep() { varlinenum=$1 varSESSTRANS_CL="$(egrep -n "<\/SESSTRANSFORMATIONINST>" tmpsess9580.txt | cut -d":" -f1)" echo $varSESSTRANS_CL } dategrep 8 Output of the above command is: I want to find out greater than 8 and... (9 Replies)
Discussion started by: tmalik79
9 Replies

7. Shell Programming and Scripting

Find image greater than x pixels?

Hi Guys, I have a little problem, was wondering if anyone had any experience with this? I am using imagemagick to remove whitespace from images, however some images are corrupt and the server hangs and eventually crashes because imagemagick doesnt know what to do, even though I have set the... (4 Replies)
Discussion started by: mikemeadeuk
4 Replies

8. Shell Programming and Scripting

Trying to find files equal to and greater than

Hi Guys and Gals, I'm having some difficulty putting this check into a shell script. I would like to search a particular directory for a number of files. The logic I have is pretty simple: Find file named *.txt that are newer than <this file> and count them If the number of files is equal to... (4 Replies)
Discussion started by: bbbngowc
4 Replies

9. Shell Programming and Scripting

find port greater than 6000

How to get the listening ports which is greater than 6000 using netstat ? (1 Reply)
Discussion started by: gsiva
1 Replies

10. Shell Programming and Scripting

Find lines greater than 80 characters in a file

Hi, Can anyone please give me the grep command to find all the lines in a file that exceed 80 columns Thanks, gubbala (8 Replies)
Discussion started by: mrgubbala
8 Replies
Login or Register to Ask a Question