943,648 Members | Top Members by Rank

Ad:
Apr 3rd, 2008
0

Awk question

Expand Post »
Shell Scripting Syntax (Toggle Plain Text)
  1. #!/bin/bash
  2. ARCHIVE_PATH=/archive
  3. CURRENT_DATE='date +%F%H%M%S'
  4. echo running at `date` >>~/Logs.txt
  5.  
  6. for FolderToSearch in $(ls -l /home/stuff/tp |grep ^d|awk '{print $9}');
  7. do find /home/stuff/tp/$FolderToSearch/in -name '*.*'|awk '{print "zip -m " $ARCHIVE_PATH "_" $FolderToSearch "zip2arc.zip" $CURRENT_DATE;}'|bash|tee -a ~/Logs.txt;
  8. done

Hi there,
I'd appreciate it if anyone can tell me how to use variables within the print statement of an awk statement. The above code is meant to
1. List a directory.
2. For each subdirectory, list the files in its in/ folder.
3. Zip these files into a /archive/zip file (also removing them zip -m)
Ideally, the zip file would have the name of the folder it came from as a prefix of its filename and the date as postfix.

The problem is that $CURRENT_DATE and $ARCHIVE_PATH are not expanded to their values. I've tried using single quotes etc.Note that this is on AIX, where find and awk, although very similar, are a little bit primitive compared to their GNU counterparts.
If anyone can recommend a good hair transplant clinic too I'd be eternally in your debt.

Thanks in advance.
Similar Threads
Reputation Points: 10
Solved Threads: 0
Newbie Poster
mooglor is offline Offline
2 posts
since Apr 2008
Apr 3rd, 2008
0

Re: Awk question

I just noticed that I pasted a small problem, missing the $1.
Just to clarify a little:

My problem is specifically with this line:

Shell Scripting Syntax (Toggle Plain Text)
  1. awk '{print "zip -m " $ARCHIVE_PATH $FolderToSearch "zip2arc.zip" $CURRENT_DATE " " $1;}'

I expect it to ouput this:
zip -m archive/Folder1zip2arc.zip2008-04-03113933 Filename1

But it outputs:
zip -m zip2arc.zip Filename1

...leaving out all of the variables.
Reputation Points: 10
Solved Threads: 0
Newbie Poster
mooglor is offline Offline
2 posts
since Apr 2008
Apr 3rd, 2008
0

Re: Awk question

Hey There,

The issue may be resolved by just using double quotes around your statement to expand variables from the shell within awk, like:

Shell Scripting Syntax (Toggle Plain Text)
  1. awk "{print "zip -m " $ARCHIVE_PATH $FolderToSearch "zip2arc.zip" $CURRENT_DATE " " $1;}"

If you want to specifically set a variable within the awk statement, you can set it like

Shell Scripting Syntax (Toggle Plain Text)
  1. var=value

and then expand it using

Shell Scripting Syntax (Toggle Plain Text)
  1. print $var

It can be a bit tricky if you want to combine the two, since $1 in awk is distinctly different from $1 in the shell, depending.

Hopefully some of that is helpful

, Mike
Reputation Points: 102
Solved Threads: 47
Posting Whiz
eggi is offline Offline
399 posts
since Oct 2007
Apr 4th, 2008
0

Re: Awk question

The problem is that those variables are within single quotes so are not expanded.
You need to end the single quote before the variable and start it again after the variable when building your awk script
eg echo 'This is singlequoted - TERM='$TERM' this is also single quoted'
Reputation Points: 10
Solved Threads: 0
Newbie Poster
chrisgood60 is offline Offline
2 posts
since Feb 2008
Apr 5th, 2008
0

Re: Awk question

use the -v option of awk to pass in shell variables so that you don't have to get too confused between shell and awk variables.
eg
Shell Scripting Syntax (Toggle Plain Text)
  1. awk -v archive="$ARCHIVE" ' {
  2. print archive
  3. # etc code
  4. }
  5.  

also you do not need to use ls , grep and awk just to get directory names. you can use find.
Shell Scripting Syntax (Toggle Plain Text)
  1. for foldersearch in `find /path -type d`
  2. do
  3. ...
  4. done
Last edited by ghostdog74; Apr 5th, 2008 at 6:24 am.
Reputation Points: 75
Solved Threads: 44
Junior Poster
ghostdog74 is offline Offline
156 posts
since Apr 2006

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in Shell Scripting Forum Timeline: Linux command
Next Thread in Shell Scripting Forum Timeline: Urgent: Help on grep the nearest value using bash script





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC