Replace first occurrence of a string in while loop


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Replace first occurrence of a string in while loop
# 1  
Old 05-08-2019
Replace first occurrence of a string in while loop

####Solved####
Hello,
My aim is to replace searched string with incremented value under ubuntu 16.04.
Example:
Code:
aasasasas 9030 31wwo weopwoep
weerasas 9030 ew31wo ieopwoep
bbqqqsas 9030 ew3swo ieeopwoep
ccsaqpas 9030 ewiro o2opwoep

Expected:
Code:
aasasasas 9030 31wwo weopwoep
weerasas 9031 ew31wo ieopwoep
bbqqqsas 9032 ew3swo ieeopwoep
ccsaqpas 9033 ewiro o2opwoep

I know, what I tried is logically not true:
Code:
i=9029
while read -r line
do
i=$i++
sed -i '0,/9030/{s/9030/$i/}' example 
done<example > expected

Is it possible to get expected output with sed?

EDIT: I tried below command but it starts from 1:
Code:
cat example |  awk '/9030/{count++; { sub("9030",count, $0)}; }; {print }'


Final Edit:
Code:
cat example |  awk '/9030/{count++; { sub("9030",count+9029, $0)}; }; {print }'

I'd appreciate you help
Thank you
Boris

Last edited by baris35; 05-08-2019 at 10:36 PM.. Reason: solved
This User Gave Thanks to baris35 For This Post:
# 2  
Old 05-08-2019
Hello baris35,

Very good that you have solved your question by yourself and appreciate that you have shared with us too, keep it up Smilie
You could better your solution by doing this:
Code:
awk '{sub("9030",$2+count++,$2)} 1'   Input_file

OR
Code:
awk '$2==9030{$2=$2+count++} 1'  Input_file

Output will be as follows.
Code:
aasasasas 9030 31wwo weopwoep
weerasas 9031 ew31wo ieopwoep
bbqqqsas 9032 ew3swo ieeopwoep
ccsaqpas 9033 ewiro o2opwoep

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 3  
Old 05-09-2019
$2==9030 is quite precise, compared to /9030/ where 9030 can appear as string or substring in all columns.
Back to the while loop. The read command can split the columns into variables
Code:
i=9029
while read -r col1 col2 remainder
do
  i=$(( i+1 ))
  if [ "$col2" = 9030 ]
  then
    col2=$i
  fi
  echo "$col1 $col2 $remainder"
done < example > expected

Sometimes it makes sense to use a case-esac.
The $(( )) can contain a modification of the variable.
Code:
i=9029
while read -r col1 col2 remainder
do
  case $col2 in
  ( 9030 )
    col2=$(( i+=1 ))
  ;;
  esac
  echo "$col1 $col2 $remainder"
done < example > expected

BTW here, like in your final awk solution, the $i is not incremented if there is no 1930
(Comment for the experts: bash-2 and ksh88 need i+=1 rather than ++i)
This User Gave Thanks to MadeInGermany For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Trim after nth occurrence with loop

Hello, Below command trims right after the nth occurrence of a string. When I try in while loop, it is not working. In Terminal IFS=/ ; read -ra val < Textfile ; echo "${val:0:3}" It gives only one line: sunday/monday/tuesday Textfile: sunday/monday/tuesday/wednesday/thursday... (2 Replies)
Discussion started by: baris35
2 Replies

2. AIX

Replace consecutive occurrence of string in same line

Hi All, I have a requirement to replace consecutive occurence of same string nedd to be replaced. Below is the input and desired output. Input: --------- 123.5|ABC|.|.|. 234.4|DEF|.|.|.|.|.| Output: --------- 123.5|ABC|||. 234.4|DEF||||| so basically "|.|" need to be replaced with... (9 Replies)
Discussion started by: ureddy
9 Replies

3. UNIX for Dummies Questions & Answers

[Solved] Replace first occurrence after match

hey guys, i have been trying to work this thing out with sed with no luck :confused: i m looking for a way to replace only the first occurrence after a match for example : Cat Realized what you gotta do Dog Realized what you gotta do Sheep Realized what you gotta do Wolf Realized... (6 Replies)
Discussion started by: boaz733
6 Replies

4. UNIX for Dummies Questions & Answers

How to replace particular occurrence of character in between a delimiter?

Hi, Hi, I have a file with following format 1|" "text " around " |" fire "guest"|" " 2| "xyz"" | "no guest"|"3" 3| """ test3""| "one" guest"|"4" My requirement is to replace all occurrences of " to ' which are occurring between |" "|delimiter so my output should look like this 1|"... (3 Replies)
Discussion started by: H_bansal
3 Replies

5. Shell Programming and Scripting

Sed diffrent replace by occurrence

I couldn't find the answer anywhere, so I hope you could help me. I need to change something like the following: something/bla/aaaa anything/bbb to: something --bla ----aaaa anything --bbb How do I do this? Is it possible with sed? I tried various patterns, but don't know how to... (5 Replies)
Discussion started by: Patwan
5 Replies

6. Shell Programming and Scripting

Replace x Number of String Occurrence with Sed

Ok, So I have a huge file that has over 12000 lines in it. in this file, there are 589 occurrences of the string "use five-minute-interval" spread in various areas in the file. How can i replace the the last 250 of the occurrences of "use five-minute-interval" with "use... (10 Replies)
Discussion started by: SkySmart
10 Replies

7. Shell Programming and Scripting

remove characters from string based on occurrence of a string

Hello Folks.. I need your help .. here the example of my problem..i know its easy..i don't all the commands in unix to do this especiallly sed...here my string.. dwc2_dfg_ajja_dfhhj_vw_dec2_dfgh_dwq desired output is.. dwc2_dfg_ajja_dfhhj it's a simple task with tail... (5 Replies)
Discussion started by: victor369
5 Replies

8. Shell Programming and Scripting

SED replace string by occurrence

hi all, I have a text file with following content PAGENUMBER asasasa asasasa PAGENUMBER sasasasasa PAGENUMBER using sed i want to replace PAGENUMBER by occurrence count eg 1 asasasa asasasa 2 sasasasasa 3 (4 Replies)
Discussion started by: uttamhoode
4 Replies

9. Shell Programming and Scripting

Replace second occurrence only

HPUX /bin/sh (posix) I have a file as such cat dog mouse deer elk rabbit mouse rat pig I would like to replace the second occurrence of mouse in this file with mouse2. The rest of the file has to stay exactly as is. I'm not sure exactly where mouse might be (could be first,second,third... (5 Replies)
Discussion started by: lyoncc
5 Replies

10. UNIX for Dummies Questions & Answers

Search and replace to first occurrence of string

Hi all, I have a very large; delimited file. In vi I would like to replace: CSACT_DY;AVG_UEACT1;uesPerActiveLinkSetSize_1;#;A CSACT_DY;AVG_UEACT2;uesPerActiveLinkSetSize_2;#;A CSACT_DY;AVG_UEACT3;uesPerActiveLinkSetSize_3;#;A with: CSACT_DY;AVG_UEACT1;Average... (7 Replies)
Discussion started by: gilmord
7 Replies
Login or Register to Ask a Question