Search and replace in file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Search and replace in file
# 1  
Old 10-04-2016
Search and replace in file

hi All

i'm new to shell/bash scripting and need help to write a script.

question: i have a file of 100's of line, i need to replace all zeros in that file with its respective position, starting from 0 to 23 and remove the remaining
sample file is like.

Code:
Enter the date in the format YYYYMMDD: NODE
         00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
         == == == == == == == == == == == == == == == == == == == == == == == ==

JKSJM01   2  2  2  2  2  2  2  2  2  0  2  2  2  2  2  2  2  2  2  2  2  0  0  0
JKMSC1    2  2  2  2  2  2  0  2  2  2  2  2  2  2  2  2  2  2  2  2  2  0  0  0
SRIMSC3   3  3  3  3  0  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  0  0  0
SRIMSC2   3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  0  0  0
SRGMSC1   6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  0  0  0
JKGJM01   6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  0  0  0
HRSAM02   2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  0  0  0

need to replace all 0's with its position except the name eg.
> before
Code:
JJKSJM01   2  2  2  2  2  2  2  2  2  0  2  2  2  2  2  2  2  2  2  2  2  0  0  0
JKMSC1     0  2  0  2  2  2  0  2  2  2  0  2  2  2  2  2  2  2  2  2  2  0  0  0

>After
Code:
JJKSJM01   09 21 22 23
JKMSC1     00 02 06 10 21 22 23

this way all 0's are replaced with there corresponding positions and remaining values are removed.

kindly help


Moderator's Comments:
Mod Comment Use code tags, thanks.

Last edited by rbatte1; 10-04-2016 at 11:48 AM.. Reason: Added CODE tags.
# 2  
Old 10-04-2016
Any attempts/ideas/thoughts from your side?
# 3  
Old 10-04-2016
Welcome sunnu2u86 ,

I have a few to questions pose in response first:-
  • What have you tried so far?
  • What output/errors do you get?
  • What OS and version are you using?
  • What are your preferred tools? (C, shell, perl, awk, etc.)
  • What logical process have you considered? (to help steer us to follow what you are trying to achieve)
Most importantly, What have you tried so far?

There are probably many ways to achieve most tasks, so giving us an idea of your style and thoughts will help us guide you to an answer most suitable to you so you can adjust it to suit your needs in future.


We're all here to learn and getting the relevant information will help us all.


Kind regards,
Robin
This User Gave Thanks to rbatte1 For This Post:
# 4  
Old 10-04-2016
hi

I tried to write to code but it is not working and now i'm stuck in between.

code i wrote is like.

Code:
for line in `cat filex.txt`;
	do
		count = -1
		for i in $line;
			do 
				if count == -1
				 then
				  echo $i
				else 
				echo ${each//0/count}
				< filex.txt > file.txt.t ; mv file.txt{.t,}
				count = count + 1
				fi
				;done;done

>but it is not working at all.
>shell,bash,perl or python can use.
>os -- linux 6
Moderator's Comments:
Mod Comment PLEASE stop using bold blue text for code. Use CODE tags as required for forum rules.
Using bold and color tags does not preserve indentation and does not use a fixed width font.
Using CODE tags does both and both are important when examining sample input, sample output, and code segments.

Last edited by Don Cragun; 10-04-2016 at 08:30 PM.. Reason: Change B and COLOR tags to CODE tags.
# 5  
Old 10-04-2016
Hi,
Here is a complete answer , including your input data.
I changed the last number of the last line, for testing purpose, otherwise all the last numbers were zeros .
Code:
$ cat node.tmp
Enter the date in the format YYYYMMDD: NODE
         00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
         == == == == == == == == == == == == == == == == == == == == == == == ==

JKSJM01   2  2  2  2  2  2  2  2  2  0  2  2  2  2  2  2  2  2  2  2  2  0  0  0
JKMSC1    2  2  2  2  2  2  0  2  2  2  2  2  2  2  2  2  2  2  2  2  2  0  0  0
SRIMSC3   3  3  3  3  0  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  0  0  0
SRIMSC2   3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  0  0  0
SRGMSC1   6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  0  0  0
JKGJM01   6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  0  0  0
HRSAM02   2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  0  0  8
$
$ awk 'NF==25{printf "%-10s",$1;for(i=2;i<26;i++){if($i == 0) printf " %2d",i-2};print ""}' node.tmp
JKSJM01     9 21 22 23
JKMSC1      6 21 22 23
SRIMSC3     4 21 22 23
SRIMSC2    21 22 23
SRGMSC1    21 22 23
JKGJM01    21 22 23
HRSAM02    21 22

# 6  
Old 10-04-2016
Hi,

@blastit.fr : your code missing leading zero as per OP output example.

Code:
awk 'NR==2{split($0,a)} {printf"%s ",$1;for(i=2;i<=NF;i++) if ( $i==0 ) { printf"%02d ",a[i-1] };print " "}' file

Gives output:
Code:
JKSJM01 09 21 22 23  
JKMSC1 06 21 22 23  
SRIMSC3 04 21 22 23  
SRIMSC2 21 22 23  
SRGMSC1 21 22 23  
JKGJM01 21 22 23  
HRSAM02 21 22 23

If you want entire line with all the fields and you want 02,03 instead of 3, please try the below one and modify as per your need.

Code:
awk 'NR==2{split($0,a)} {for(i=2;i<=NF;i++) if ( $i==0 ) { $i=a[i-1] }}1' file

Gives output:
Quote:
Enter the date in the format YYYYMMDD: NODE
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
== == == == == == == == == == == == == == == == == == == == == == == ==

JKSJM01 2 2 2 2 2 2 2 2 2 09 2 2 2 2 2 2 2 2 2 2 2 21 22 23
JKMSC1 2 2 2 2 2 2 06 2 2 2 2 2 2 2 2 2 2 2 2 2 2 21 22 23
SRIMSC3 3 3 3 3 04 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 21 22 23
SRIMSC2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 21 22 23
SRGMSC1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 21 22 23
JKGJM01 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 21 22 23
HRSAM02 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 21 22 23

Last edited by greet_sed; 10-04-2016 at 06:24 PM.. Reason: Add missing code tags
# 7  
Old 10-04-2016
@greet_sed,

ok for the missing 0 , but your other suggestion is outside the original spot.
see:
Code:
$ awk 'NF==25{printf "%-10s",$1;for(i=2;i<26;i++){if($i == 0) printf " %02d",i-2};print ""}' node.tmp
JKSJM01    09 21 22 23
JKMSC1     06 21 22 23
SRIMSC3    04 21 22 23
SRIMSC2    21 22 23
SRGMSC1    21 22 23
JKGJM01    21 22 23
HRSAM02    21 22

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Search and Replace in a new FILE.

Hi, more data.txt more srstring.sh input="data.txt" while IFS= read -r var do startdirectory=$loc search=$(echo $var | awk -F'=' '{print $1}') replace=$(echo $var | awk -F'=' '{print $2}') find "/tmp/config" -type f -exec grep -l "$search" {} + | while read file do if sed -e... (9 Replies)
Discussion started by: mohtashims
9 Replies

2. Shell Programming and Scripting

Nested search in a file and replace the inner search

Hi Team, I am new to unix, please help me in this. I have a file named properties. The content of the file is : ##Mobile props east.url=https://qa.east.corp.com/prop/end west.url=https://qa.west.corp.com/prop/end south.url=https://qa.south.corp.com/prop/end... (2 Replies)
Discussion started by: tolearn
2 Replies

3. Shell Programming and Scripting

Search for a string in a file and replace

I have file t1.log Contents of t1.log file Number of records processed: Number of records rejected: Error : xyz .......... abc .......... aaa _] start time : end time : Please let me know how i can remove the contents highlighted in red in the t1.log file. Thanks Sam (3 Replies)
Discussion started by: sam777
3 Replies

4. Emergency UNIX and Linux Support

Search and replace in text file

Hi, I have gigabytes of text files that I need to search for "&" and replace with "&amp". Is there a way to do this efficiently (like sed command)? Hope you could help. Thanks. (17 Replies)
Discussion started by: daytripper1021
17 Replies

5. Shell Programming and Scripting

Optimised way for search & replace a value on one line in a very huge file (File Size is 24 GB).

Hi Experts, I had to edit (a particular value) in header line of a very huge file so for that i wanted to search & replace a particular value on a file which was of 24 GB in Size. I managed to do it but it took long time to complete. Can anyone please tell me how can we do it in a optimised... (7 Replies)
Discussion started by: manishkomar007
7 Replies

6. Shell Programming and Scripting

Help on search and replace in a file

Hi all, The operating system is Solaris 10 I have example line here below I need to change the stat1 to stat2 using a shell script. search for space(" ") and replace with "\ " Stat1 --- /data/Sat Night Stay.txt Stat2 --- /data/Sat\ Night\ Stay.txt Thanks Firestar. (1 Reply)
Discussion started by: firestar
1 Replies

7. UNIX for Advanced & Expert Users

search and replace in a file

I have a file (say file1.txt) and I have to search for a line which has a text replace it and replace another string too in the same line. Eg: file1.txt -------- x='hai' y='world' z='unix' x='hai' y='world' x='hai' z='perl' y='world' z="world" k="junk" b="world" z='perl' x='hai'... (3 Replies)
Discussion started by: ammu
3 Replies

8. Shell Programming and Scripting

search and replace in a file

Hi I have to search & replace column in the file.For example ..below iam having File1. in which 3rd column ...if it is A it should be 'ACT' if P it should be 'PAD' and if it ils D it should be 'DEC' I have to pass column no ,value and to be converted value as variables in to the... (2 Replies)
Discussion started by: satyam_sat
2 Replies

9. Shell Programming and Scripting

Search and replace in file..

Hi All, As I'm working on a Unix script... and the requirement is like, I need to search a word and replace it with the another word... for that i'm using SED command.... can anybody give any other alternate for this...? Thanks Amit (2 Replies)
Discussion started by: Amits
2 Replies

10. UNIX for Dummies Questions & Answers

Search and replace in file

Hi guys, I have one file with duplicate string. I want to replace all the occurance of that string with some other string. How can I do that in vi editor? Malay Maru (3 Replies)
Discussion started by: malaymaru
3 Replies
Login or Register to Ask a Question