Find and replace using sed


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Find and replace using sed
# 15  
Old 12-05-2013
Thanks WorkingSmilie, can you explain the command flow $+0 and $3+0 ?
# 16  
Old 12-05-2013
Quote:
Originally Posted by Roozo
Thanks WorkingSmilie, can you explain the command flow $+0 and $3+0 ?


By adding0 awk treats array index$1 as numeric value, if you do not add 0 then string

Example :

Code:
$ awk 'FNR==NR{A[$1]; next}END{for(i in A)print i }' input
55
066

$ awk 'FNR==NR{A[$1+0]; next}END{for(i in A)print i}' input
55
66

# string
$ cat <<eof | awk 'FNR==NR{A[$1]; next}END{for(i in A)print i }'
text
12
eof

text
12

# Numeric
$ cat <<eof | awk 'FNR==NR{A[$1+0]; next}END{for(i in A)print i }'
text
12
eof

12
0     -----> text is treated as 0 here

In fact adding numeric value to string or anything, awk does numeric conversion, and treats it as numeric as far as I know.

Last edited by Akshay Hegde; 12-05-2013 at 10:19 AM..
This User Gave Thanks to Akshay Hegde For This Post:
# 17  
Old 12-05-2013
Code:
#!/usr/bin/env perl
use strict;
use warnings;

while(<>){
	my @sp = split(/,/ , $_);
	$sp[4] = "77\n" if $sp[2] == "66" ;	
	print join(",", @sp); 
}

# 18  
Old 12-14-2013
Thanks,

Code:
awk 'FNR==NR{A[$1+0]; next} $3+0 in A{$5=replace}1' replace=77 FS=, OFS=, input.txt file

How to move the replaced lines to the beginning of the file, like the below
Code:
3,5,066,K,77
3,5,066,M,77
6,9,066,J,77
1,2,33,C,B 
1,2,33,H,M
4,8,155,H,P
5,7,44,N,U

# 19  
Old 12-14-2013
Try:
Code:
awk 'FNR==NR{A[$1+0]; next} !($3+0 in A){p=p $0 ORS; next} {$5=replace}1 END{printf "%s",p}' replace=77 FS=, OFS=, input.txt file

or, perhaps more legible
Code:
awk '
  FNR==NR{
    A[$1+0]
    next
  }
  !($3+0 in A){
    p=p $0 ORS
    next
  }
  {
    $5=replace
  }
  1 
  END{
    printf "%s",p
  }
' replace=77 FS=, OFS=, input.txt file

# 20  
Old 12-14-2013
OR

Try


if second file size is too big then you may have to face memory problem

Code:
$ awk 'FNR==NR{A[$1+0]; next}{if($3+0 in A){$5=replace;print}else{last[++i]=$0}}END{for(j=1;j<=i;j++)print last[j]}' replace=77 FS=, OFS=, input file

or just pipe and sort
This User Gave Thanks to Akshay Hegde For This Post:
# 21  
Old 12-14-2013
Sort by what, Akshay?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

sed find 2 strings and replace one

Hi Everyone, I want to find this 2 strings in a single line a file and replace the second string. this is the line i need to find <param name="user" value="CORE_BI"/> find user and CORE_BI and replace only CORE_BI with admin so finally the line should look like this. <param... (5 Replies)
Discussion started by: shajay12
5 Replies

2. Shell Programming and Scripting

Find and replace using sed

Hi All, I have a file as shown below: myFile.dat #---------------------------------------------------------- dataFile { Name shiva; location Delhi; travelID IDNumber; } 4 ( 560065 700007 100001 200002 )... (8 Replies)
Discussion started by: linuxUser_
8 Replies

3. Shell Programming and Scripting

Find and replace using sed command

The content of the file filea.txt is as follows. --------- case $HOSTNAME in aaa) DS_PARM_VALUE_SET=vsDev APT_Configuration_File=/appl/infoserver/Server/Configurations/2node.apt ;; bbb) DS_PARM_VALUE_SET=vsQA... (3 Replies)
Discussion started by: kmanivan82
3 Replies

4. Shell Programming and Scripting

Find and Replace with sed

Hi, I have a file such that: tart*)*98'bank'ksb64bank)(tart2d&f44bank I want to replace to: (only between tart and bank) tart*)*98'replaced'ksb64bank)(tart2d&f44replaced Thanks. (6 Replies)
Discussion started by: tara123
6 Replies

5. Shell Programming and Scripting

find and replace using SED

I need to do a find and replace. I tried below logic but getting warnings Could you please help? a=`echo "<!DOCTYPE aaaaa bbbbb \"sample.dtd\">"` b="<!DOCTYPE aaaaa bbbbb \" /a/b/c/datain/d_k/sample.dtd \">" echo $a | sed -e "s/$a/$b/" > c.txt getting the following error sed:... (1 Reply)
Discussion started by: kmanivan82
1 Replies

6. Shell Programming and Scripting

find and replace with sed

Hi, I have two files file1 :> val="10" port="localhost:8080" httpadd="http:\\192.168.0.239" file2 :> val=${val} port=${port} httpadd=${httpadd} fileloc=${fileloc} file3(or file2) should have following output(input from fileone) file3 (8 Replies)
Discussion started by: nitin.pathak
8 Replies

7. Shell Programming and Scripting

find and replace with SED

Hello all I have a file with a lot of records...Each one have a ID like this: 000000001 LDR L -----nam--2200217Ia-45e0 000000001 891 000000001 892 000000001 893 and so on then you have the second record: 000000002 LDR L -----nam--2200208Ia-15e0 000000002 891 000000002... (5 Replies)
Discussion started by: ldiaz2106
5 Replies

8. Shell Programming and Scripting

Help with find and Replace using sed

I have to update a paramater (dateMemLimit) present in a file, with a date (YYYYMMDD) equal to 5 days before the sysdate. The parameter will be in the following format. dateMemLimit = 20091201 Please note the blank spaces present between 'dateMemLimit' &'=' and between '='... (4 Replies)
Discussion started by: rajesh8s
4 Replies

9. Shell Programming and Scripting

find and replace using sed

Hello Everybody, I am doing something like this on Redhat Linux h=`cut -d"." -f4 file1` s=`cut -d"." -f4 file2` sed "s/$h/$s/g" file3 but this is not working but if giving constant value its working, for ex. sed "s/93/$h/g" file3 help... Thanks for looking into my question (2 Replies)
Discussion started by: arvind_aks15
2 Replies

10. Shell Programming and Scripting

Find a pattern and replace using sed.

Hi I need to help on finding the below pattern using sed <b><a href="/home/document.do?assetkey=x-y-abcde-1&searchclause=photo"> and replace as below in the same line on the index file. <b><a href="/abcde.html"> thx in advance. Mari (5 Replies)
Discussion started by: maridhasan
5 Replies
Login or Register to Ask a Question