awk not outputting properly


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk not outputting properly
# 15  
Old 05-01-2012
So the directories won't be there to move ...?
I think it'd much better to read through the file once and perform the work, then for each directory to spawn off awk to find it in a file.. Maybe a style thing. In the end directories that exist will be moved. You can suppress errors or check for it first I guess

Code:
[[ -d $olddir ]] && {
    echo "Moving $olddir"
    mv "$olddir" "$newdir"
}

# 16  
Old 05-01-2012
Quote:
Originally Posted by neutronscott
So the directories won't be there to move ...?
I think it'd much better to read through the file once and perform the work, then for each directory to spawn off awk to find it in a file.. Maybe a style thing. In the end directories that exist will be moved. You can suppress errors or check for it first I guess

Code:
[[ -d $olddir ]] && {
    echo "Moving $olddir"
    mv "$olddir" "$newdir"
}


Correct, I think. Basically between mergers and new policies we are migrating in tons of remote offices into one global standard. These mobile offices have been self managing for years. Someone has pieced together a master list of all the folders on all the servers and shares. They have input all the old names and what the new names should be. So, not every folder exists on every share, there is just one master list. That is why I was building an array of data from the share point, and then looping it through the master list and moving folders only when matches were found.

This isn't a very elegant solution but I am working with what I got here.

Thanks,

---------- Post updated at 12:46 PM ---------- Previous update was at 09:14 AM ----------

So, is the problem that I am passing ${i} in awk, inside single quotes? Which is why it outputs blank because it is interpreting it as a literal character and not a variable?


Code:
newFolder=`awk -F, '/${i}/ { sub(/\r/,"");print $2;exit }' ~/home/folders_list.txt `

Since ${i} is in single quotes inside the awk logic it is not passing it as a variable?

---------- Post updated at 01:01 PM ---------- Previous update was at 12:46 PM ----------

So, after reading through the man page I think this is what I want to do with awk

Code:
newFolder=`/usr/bin/awk -F, -v var=${i} '/var/ { sub(/\r/,"");print $2;exit }' ~/test/folders_list.txt`

That seems to pass the variable properly but doesn't grab the correct value.
# 17  
Old 05-01-2012
https://www.unix.com/302627793-post3.html

also quote your shell expansions, -v var="$i"
if you REALLY want to use use /var/ (which matches anywhere in the line, not just the old directory column like you should) then you cannot use that shorthand, because /var/ treats var as the regex itself... you'd use $0 ~ var which would still treat the variable as a regex (but you've a fixed string, dots should not match ANY character probably). So you'd use index($0,var).. But still, see post #3 Smilie I really think you want $1 == var (unless i'm still totally mistaken about whats going on here)
# 18  
Old 05-01-2012
So, yeah I figured it out, and it is working. I guess I wasn't grasping at first you cannot pass a bash variable to an awk program.

here is my new method and the output works as expected. Thanks for all your suggestions man I super appreciate it. This isn't high priority but I cannot let it sit any longer, otherwise I will have managers asking me why it is not done yet.

Code:
newFolder=`/usr/bin/awk -F, '/^'${i}'/ { sub(/\r/,"");print $2;exit }' ~/path/to/master_list.txt`

# 19  
Old 05-01-2012
Smilie
# 20  
Old 05-01-2012
Yeah I know probably not the most elegant solution, but it does work. Sorry, I am not quite an awk master here and am working with what they gave me.

---------- Post updated at 01:59 PM ---------- Previous update was at 01:52 PM ----------

Quote:
Originally Posted by neutronscott
Smilie

yeah man, that is exactly what I did. I travel for work right now so I am in different time zones and hotels 6 days a week, and only off one day. I am pretty much half zombie right now.

Haha, I will totally paypal you money for a beer, you deserve it after dealing with me!
# 21  
Old 05-01-2012
Like that, you would still need to double quote the variable expansion:
Code:
newFolder=`/usr/bin/awk -F, '/^'"$i"'/ { ...`

But that would still leave room for partial matches...
Neutronscott made some better suggestions IMO.
This User Gave Thanks to Scrutinizer 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

awk print not working properly

Hello friends, There is one requirment where I need to login into database environment and pull all schema names into a text file ... as of now below are the schemas available... $> describe keyspaces; system_schema system_auth system abc system_distributed system_traces Now from... (4 Replies)
Discussion started by: onenessboy
4 Replies

2. Shell Programming and Scripting

Problem outputting increment

With this script the output to the terminal does not increment. Can anyone tell me what I need to do to get this to increment output to the terminal? Here is the output mpath major,minor number ls: /dev/mapper/mpathp1: No such file or directory raw device output 253,44 echo raw device... (5 Replies)
Discussion started by: bash_in_my_head
5 Replies

3. Shell Programming and Scripting

awk, sed, perl assistance in outputting formatted file

Hello, Please advise. Scoured this site, as well as google for answers. However if you do not know what to search for, it's a bit hard to find answers. INPUT: ACTASS= 802 BASECOS= 279 COSNCHG= 3 CUSCOS= 52 UPLDCOS= 2 DESIRED OUTPUT: ACTASS=802 BASECOS=279 (13 Replies)
Discussion started by: abacus
13 Replies

4. Shell Programming and Scripting

AWK how to change delimiter while outputting

Hello I need some help in outputting Fields when the delimiter has changed: echo "test1,test2 | test3,test4,test5" | awk -F"," '{print $1,"COUNT",$2,$4}' prints out: test1 COUNT test2 | test3 test5 But how to change the -F"," to -F"|" delimiter, so that it separates the fields from $2... (2 Replies)
Discussion started by: sdohn
2 Replies

5. Shell Programming and Scripting

AWK: pattern not properly stored in variable?

Hey there, I have a table of contents file of the form 1 Title1 1.1 Subtitle1 1.1.1 Subsubtitle1 1.1.2 Subsubtitle2 ... and want to count the number of dots in the first field to find out the level of the section. I use the gsub function for the job, which works if I pass the pattern... (2 Replies)
Discussion started by: herrsimon
2 Replies

6. UNIX for Dummies Questions & Answers

PC awk not working properly on OSX

Hi, I'm having some trouble with an awk programme that i'm using to scan ascii files. Unfortunately I'm not an experienced programmer but I think I am experiencing problems for a two reasons: 1) the awk was written by a PC programmer and it works on his machine, but only partly works... (10 Replies)
Discussion started by: Dan Browne
10 Replies

7. Shell Programming and Scripting

Script Assistance - Outputting to file with Awk

I'm trying to take a list of domains, find out the MX resolve it to IP then find out what the NS is and output the contents to a new file. The only problem i'm having is when checking the Ip or host of the MX i can only get it to print the column with the MX record and the results of the host... (1 Reply)
Discussion started by: spartan22
1 Replies

8. UNIX for Dummies Questions & Answers

getting input, then outputting it

Hi! I am a newbie to Unix. I was writing a little game program for fun when thought of an idea to allow data to be saved. I knew to take all of the Predefined variables and put them into a separate file, then including the file in the program. But I am having trouble making it so that the user... (0 Replies)
Discussion started by: signebedi
0 Replies

9. Shell Programming and Scripting

Outputting to table

I have information in a file called HITS. This file has been populated by the user entering search criteria. the HITS file contains information: filname.hits: 123.33.345.66 Fri Nov 26 11.45.56.43 GMT 2006 at the moment i am just displayin the information using cat HITS. ... (3 Replies)
Discussion started by: amatuer_lee_3
3 Replies

10. Shell Programming and Scripting

expr not outputting properly.. bsd sh script

When i run sh -x test.sh, expr outputs x=expr $x + 1 instead of doing the arithmetic.. been working on this overnight.. and its being a pain in the arse if you ask me.. :confused::confused: #!/bin/sh #script for downloading numerical filenames chap=1 p=1 count=0 x=1 while do if ... (2 Replies)
Discussion started by: aspect_p
2 Replies
Login or Register to Ask a Question