AWK manipulation in bash script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting AWK manipulation in bash script
# 1  
Old 07-06-2011
AWK manipulation in bash script

EDIT: This has been SOLVED. Thanks!

Greetings everyone,

I've posted a few threads with some quick help questions, and this is another one of those. I can't post enough gratitude for those much more knowledgeable than myself who are willing to give good advice for my minor issues. Now, onto my problem!

I have a file that contains a single column of random numbers called 'random.dat' for eases' sake, let's say it contains only one number. My goal is to write a bash script that looks at these numbers, scans through another file (in this case, tmp2.dat), and prints some of the original values, and some modified values. Let me show you the line I have, then explain the issue I come up with;

Code:
for num in `cat random.dat`
do
#  echo "$num"
  awk -v num=$num '{if (FNR==num) print $1,$2,"1","2",$5,$6,$7,$8,$9,$10;
  else print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10}' tmp2.dat >> tmp3.dat
done

So, the script should look at the random number in random.dat, search through the file for the correct row, then print the modified column which includes '1' and '2' instead of whatever $3 and $4 are. Note that I want it to keep all of the rows that aren't in the random number file the same. The problem is that if there are more than one random number in the random.dat file, it only changes the last row of the file that matches the random number, leaving all of the others unchanged.

To summarize, I would like my script to turn this file:

Code:
1.0  1  6  12 0.0 0.0 0.0 1.0 2.0 3.0
1.0  1  6  12 1.0 0.0 0.0 1.0 2.0 3.0
1.0  1  6  12 2.0 0.0 0.0 1.0 2.0 3.0

Into this (assume random.dat contained the number '2')
(bolded parts are what should be changed for the row, indicated in the awk portion of the script)

Code:
1.0  1  6  12 0.0 0.0 0.0 1.0 2.0 3.0
1.0  1  1   2 1.0 0.0 0.0 1.0 2.0 3.0
1.0  1  6  12 2.0 0.0 0.0 1.0 2.0 3.0

I hope I explained things as well as possible, please let me know if you have any questions. Thanks again for anyone who is willing to help me solve this dilemma!

Best regards,
Eblue

Last edited by Eblue562; 07-07-2011 at 12:14 PM..
# 2  
Old 07-06-2011
Like this?

Code:
awk 'NR==FNR{r[$1]=1;next}r[FNR]==1{$3=1; $4=2}1' rand.dat temp.dat

- read rand.dat and store the contents into an associative array 'r'
- for each line of temp.dat, if r[FNR]==1, then change $3 and $4.
- Print every line (the '1' and the end)
# 3  
Old 07-06-2011
mirni,

Thanks so much for your response! I tested the script out and it seems to do what I wanted it to do. I'm currently testing one last thing, and I will edit this post to let you know if it worked. It's looking good though, and I'm keeping my finger's crossed.

Thanks again!

EDIT: Everything works wonderfully, thanks for your help!

Last edited by Eblue562; 07-07-2011 at 12:13 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Text manipulation with sed/awk in a bash script

Guys, I have a variable in a script that I want to transform to into something else Im hoping you guys can help. It doesn't have to use sed/awk but I figured these would be the simplest. DATE=20160120 I'd like to transform $DATE into "01-20-16" and move it into a new variable called... (8 Replies)
Discussion started by: dendenyc
8 Replies

2. Shell Programming and Scripting

Bash - file manipulation

I need to change a file like this: John Smith;http://www.profile1.com John Smith;http://www.profile2.com Frank Olsen;http://www.profile3.com Frank Olsen;http://www.profile4.com Into: John Smith;http://www.profile1.com;http://www.profile2.com Frank... (2 Replies)
Discussion started by: locoroco
2 Replies

3. Shell Programming and Scripting

Bash array manipulation

seeking assistance on comparing two arrays using bash: array1=(disk1, disk2, disk3, disk5, disk7, vol1, vol2, vol3, vol4, vol5) array2=(disk2, disk5 vol2, vol4 ) 1) if two arrays have same elements; EXIT else populate array3 & array4 with elements that are different between array1 & array2 as:... (3 Replies)
Discussion started by: solaix14
3 Replies

4. Shell Programming and Scripting

Bash string manipulation

In my script I'm retrieving a parameter through an API call. I need to trim some things out of the result so I can use it as a parameter to pass to another process. I've got it working but it's pretty kludgy and I'm hoping someone can help me with a better way. This is the code that retrieves... (2 Replies)
Discussion started by: withanh
2 Replies

5. Shell Programming and Scripting

bash string manipulation

Hello guys, here is my problem: I got a shell script which is called by an external piece of software, the external software is not under my control. The software passes data as an argument to my script like ./bla.sh 'service;1234567890;ok;hostname;some text here' I need to pass the... (3 Replies)
Discussion started by: snoogie
3 Replies

6. Shell Programming and Scripting

Difficult problem: Complex text file manipulation in bash script.

I don't know if this is a big issue or not, but I'm having difficulties. I apoligize for the upcoming essay :o. I'm writing a script, similar to a paint program that edits images, but in the form of ANSI block characters. The program so far is working. I managed to save the image into a file,... (14 Replies)
Discussion started by: tinman47
14 Replies

7. UNIX for Advanced & Expert Users

string manipulation in bash shell

Hi All, I am using a bash shell and want to the following thing. A process sends the following string to my script BACKUP_FAIL_REASON="Failed - Application Dump CDMACA-0:grep: /opt/nortel/ca/data/1245184/sd00/image1/S110907070708HIS... (4 Replies)
Discussion started by: Pkumar Sachin
4 Replies

8. Shell Programming and Scripting

bash, help with stdout manipulation.

Hey all, Im kind of lost on how to do what I want so I figured I would ask. I want to pipe STDOUT of an app to a log file, but I want to prepend each line of that output with the date and time. Im drawing a complete blank on how to do this?? Any ideas? i.e. output is currently this:... (9 Replies)
Discussion started by: trey85stang
9 Replies

9. Shell Programming and Scripting

Bash string variable manipulation

In a bash script I've set a variable that is the directory name of where an executable lives. the_dir=`dirname $which myscript` which equates to something like "/path/to/dir/bin" I need to cut that down to remove the "bin" so I now have "/path/to/dir/". This sounds easy but as a... (2 Replies)
Discussion started by: Witty
2 Replies

10. Shell Programming and Scripting

Bash file manipulation help

Hello, I'm writing a bash script and I have a question. Here's what I'm doing: I have a file called inv.dat which contains the following: B102:Action Figure - Teacher:79 B103:Bike - Purple:23 B104:Baseball:25 B105:Cricket Bat:15 B101:Action Figure - Fireman:15 B100:Flame-Thrower:25 ... (2 Replies)
Discussion started by: netmaster
2 Replies
Login or Register to Ask a Question