| | |
Awk question
![]() |
•
•
Join Date: Apr 2008
Posts: 2
Reputation:
Solved Threads: 0
Shell Scripting Syntax (Toggle Plain Text)
#!/bin/bash ARCHIVE_PATH=/archive CURRENT_DATE='date +%F%H%M%S' echo running at `date` >>~/Logs.txt for FolderToSearch in $(ls -l /home/stuff/tp |grep ^d|awk '{print $9}'); do find /home/stuff/tp/$FolderToSearch/in -name '*.*'|awk '{print "zip -m " $ARCHIVE_PATH "_" $FolderToSearch "zip2arc.zip" $CURRENT_DATE;}'|bash|tee -a ~/Logs.txt; 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.
•
•
Join Date: Apr 2008
Posts: 2
Reputation:
Solved Threads: 0
I just noticed that I pasted a small problem, missing the $1.
Just to clarify a little:
My problem is specifically with this line:
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.
Just to clarify a little:
My problem is specifically with this line:
Shell Scripting Syntax (Toggle Plain Text)
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.
•
•
Join Date: Oct 2007
Posts: 399
Reputation:
Solved Threads: 47
Hey There,
The issue may be resolved by just using double quotes around your statement to expand variables from the shell within awk, like:
If you want to specifically set a variable within the awk statement, you can set it like
and then expand it using
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
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)
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)
var=value
and then expand it using
Shell Scripting Syntax (Toggle Plain Text)
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
Linux and Unix Tips, Tricks and Individual Advice - The Linux and Unix Menagerie!
------------------------------------------------------------------------
The greatest viral marketing idea of all time, get your copy of this Free Report now!
------------------------------------------------------------------------
The greatest viral marketing idea of all time, get your copy of this Free Report now!
•
•
Join Date: Apr 2006
Posts: 148
Reputation:
Solved Threads: 39
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
also you do not need to use ls , grep and awk just to get directory names. you can use find.
eg
Shell Scripting Syntax (Toggle Plain Text)
awk -v archive="$ARCHIVE" ' { print archive # etc code }
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)
for foldersearch in `find /path -type d` do ... done
Last edited by ghostdog74; Apr 5th, 2008 at 6:24 am.
![]() |
Similar Threads
- To parse through the file and print output using awk or sed script (Shell Scripting)
- Flashing a Linksys for web portal software / Mac (Networking Hardware Configuration)
- newbie question regarding checking date of file (Shell Scripting)
- Hello (Community Introductions)
- Sendmail Log Watch (Shell Scripting)
- awk question (Shell Scripting)
- Quick question about text processing (Shell Scripting)
- Artillery Duel Question (Computer Science)
- Shell Scripting problem and related awk issues (Shell Scripting)
Other Threads in the Shell Scripting Forum
- Previous Thread: Linux command
- Next Thread: Urgent: Help on grep the nearest value using bash script
| Thread Tools | Search this Thread |





