Visit The New, Modern Unix Linux Community


awk command issue


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers awk command issue
# 1  
awk command issue

Hi All,
I am trying to perform certain task using awk command but the command is not returning expected output though it is running fine independently but not in for loop.

req:
1. I am searching a pattern (say pattern1) in a dated file
2. trying to search the last occurrence of the another pattern (say pattern2) before last occurrence of pattern1.

what i am trying do:
1. search the file name where pattern1 is pattern (for today's date).
2. print the file from start to the last occurrence of pattern1
3. search first occurrence of pattern2 from the last occurrence of pattern1.

here is code snippet:

Code:
for i in PUAFZ00 AATGY00 AATHB00 AATGZ00; 
do 
echo =======================================================================================================================================;
echo -e " Symbol - $(tput setaf 1) $i ";
for d in Mon Tue Wed Thu Fri; 
do 
ydate=`date +%Y%m%d -d "last $d"`; 
filename=`grep $i /updates/logs/log*$ydate* | cut -d ':' -f1 | uniq`; 
updatefile=$(awk '1;/$i/{exit}' $filename | awk '/upd_/ {a=$0} END{print a}' | cut -d '/' -f6 | cut -d '.' -f1 |  awk 'NF{NF-=1}1' FS='_' OFS='_' ); yupd=`echo $updatefile"_"$ydate`; 
completiontime=( $(grep $yupd /home/load_updates.hst | grep "Unpack complete" | cut -d " " -f5-7) ); 
echo  "$(tput sgr 0) Processing_date - $(tput setaf 2) $ydate $(tput sgr 0) UpdatePackage - $(tput setaf 6) $updatefile $(tput sgr 0) Processing_Time $(tput setaf 3)${completiontime[@]:0} $(tput sgr 0)" ;
done;
echo =======================================================================================================================================; done


Unexpected output received on command:
Code:
$(awk '1;/$i/{exit}' $filename | awk '/upd_/ {a=$0} END{print a}' | cut -d '/' -f6 | cut -d '.' -f1 |  awk 'NF{NF-=1}1' FS='_' OFS='_' );

If i pass this command by passing the values on prompt expected output is returned.




Moderator's Comments:
Mod Comment Please use CODE tags consistently as required by forum rules!

Last edited by RudiC; 10-20-2016 at 04:25 AM.. Reason: Added CODE tags.
# 2  
Moderator's Comments:
Mod Comment This thread has now been moved to a technical forum.

Without seeing any sample data, seeing the results that are being produced, and seeing the results that are desired (all in CODE tags); it is very difficult to make any suggestions about what code changes should be made.
# 3  
On first sight it pops up that within single quotes shell variables will not be expanded, so
Code:
$(awk '1;/$i/{exit}' $filename

will not work as expected.
# 4  
Code:
for i in PUAFZ00; 
do 
echo =======================================================================================================================================;
echo -e " Symbol - $(tput setaf 1) $i ";
for d in Mon; 
do 
ydate=`date +%Y%m%d -d "last $d"`; 
filename=`grep $i /home/lim/updates/logs/log*$ydate* | cut -d ':' -f1 | uniq`; 
updatefile=$(awk '1;/$i/{exit}' $filename | awk '/upd_/ {a=$0} END{print a}' | cut -d '/' -f6 | cut -d '.' -f1 |  awk 'NF{NF-=1}1' FS='_' OFS='_' ); yupd=`echo $updatefile"_"$ydate`; 
completiontime=( $(grep $yupd /home/lim/config/load_updates.hst | grep "Unpack complete" | cut -d " " -f5-7) ); 
echo  "$(tput sgr 0) Processing_date - $(tput setaf 2) $ydate $(tput sgr 0) UpdatePackage - $(tput setaf 6) $updatefile $(tput sgr 0) Processing_Time $(tput setaf 3)${completiontime[@]:0} $(tput sgr 0)" ;
done;
echo =======================================================================================================================================; done

output:
Symbol - PUAFZ00
Processing_date - 20161017 UpdatePackage - upd_0_k36 Processing_Time 21:25:21 EDT 2016


When i run the awk command indepndently; i get the result: (this is expected)

grep command
Code:
grep PUAFZ00 /home/lim/updates/logs/log*`date +%Y%m%d -d "last Mon"`* | cut -d ':' -f1 | uniq

output:
/home/lim/updates/logs/log.0_20161017.old

awk command:
Code:
awk '1;/PUAFZ00/{exit}' /home/lim/updates/logs/log.0_20161017.old | awk '/upd_/ {a=$0} END{print a}' | cut -d '/' -f6 | cut -d '.' -f1 |  awk 'NF{NF-=1}1' FS='_' OFS='_'

output awk:[this is expected one]
Unpack complete upd_0_pluz

---------- Post updated at 03:09 AM ---------- Previous update was at 02:56 AM ----------

Code:
awk -v var="$i" '1;/var/{exit}' $filename | awk '/upd_/ {a=$0} END{print a}' | cut -d '/' -f6 | cut -d '.' -f1 |  awk 'NF{NF-=1}1' FS='_' OFS='_'

is also returning the same output:
UpdatePackage - upd_0_k36

---------- Post updated at 03:43 AM ---------- Previous update was at 03:09 AM ----------

Code:
awk -v var=$i -v var2="$filename" '1;/var/{exit}' $filename | awk '/upd_/ {a=$0} END{print a}'

output:
Quote:
Reading Facts File: /home/lim/updates/unpacked/upd_0_k36_20161017.d/k36/kr_pri_d_0.prn
# 5  
This is one step further, but still not enough. /var/ will look for the string "var" verbatim.
Try
Code:
$0 ~ var

.
# 6  
Quote:
Originally Posted by RudiC
On first sight it pops up that within single quotes shell variables will not be expanded, so
Code:
$(awk '1;/$i/{exit}' $filename

will not work as expected.


Code:
 awk -v var=$i -v var2="$filename" '1;/var/{exit}' $filename | awk '/upd_/ {a=$0} END{print a}' | cut -d '/' -f6 | cut -d '.' -f1 |  awk 'NF{NF-=1}1' FS='_' OFS='_'

Quote:
upd_0_k36
Code:
awk -v var=$i -v var2="$filename" '1;/var/{exit}' var2 | awk '/upd_/ {a=$0} END{print a}'

Quote:
awk: cmd. line:1: fatal: cannot open file `var2' for reading (No such file or directory)
Please help on this:
Code:
awk -v var=$i -v var2="$filename" '1;/$0/{exit}' var2 | awk '/upd_/ {a=$0} END{print a}'

Quote:
awk: cmd. line:1: fatal: cannot open file `var2' for reading (No such file or directory)

Last edited by abhii; 10-20-2016 at 05:51 AM.. Reason: try sugegstion - not working
# 7  
Try
Code:
awk -v var=$i  '1; $0 ~ var {exit}' $filename

You need to finely differentiate between what is IN the awk command, and what is outside (i.e. shell).
This User Gave Thanks to RudiC For This Post:

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #906
Difficulty: Easy
A Unix shell repeatedly prints a prompt, waits for a command line on stdin, and then carries out some action, as directed by the contents of the command line.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Issue with awk command

I am new to unix.I have a requirement to get few fields from the log file as below. Log app9/cc-gr_base.log.2017-07-19.gz: hostname 1500523166993 NA:NA:NA http-nio-8080-exec-56 INFO Points balance from MIS for user with userId: 19651069, first name: DEREK RICHARD and last name: BOUDREAU is... (3 Replies)
Discussion started by: nextStep
3 Replies

2. Shell Programming and Scripting

Issue with awk command between Linux and Solaris

Hi, Here is the output using bash profile on Linux uptime 04:59:14 up 16 days, 4:48, 2 users, load average: 1.00, 1.00, 1.20 Here is the output using bash profile on Solaris uptime 4:00am up 84 day(s), 22:21, 3 users, load average: 0.09, 0.10, 0.12 Now,... (4 Replies)
Discussion started by: mohtashims
4 Replies

3. Shell Programming and Scripting

awk command issue

Hi All, I have one file with below content Post1:uri Post2:urieop Post3:urtei I am trying to read each word seprated by delimiter with below command Value1=$(awk -F":" '{print $1}' $HSFILE) Value2=$(awk -F":" '{print $2}' $HSFILE) echo $Value1 echo $Value2 It is... (5 Replies)
Discussion started by: sharsour
5 Replies

4. Shell Programming and Scripting

For loop, awk command issue

limit.csv data -------------- 5600050 38Nhava 400077 27Bomay rate.txt data ------------- 38NhaVA 27BomaY 27Bomay below is my script: for i in `cat limit.csv` do b=`awk '{print $1}' $i` (4 Replies)
Discussion started by: p_satyambabu
4 Replies

5. Shell Programming and Scripting

Variable value substitution issue with awk command issue

Hi All, I am using the below script which has awk command, but it is not returing the expected result. can some pls help me to correct the command. The below script sample.ksh should give the result if the value of last 4 digits in the variable NM matches with the variable value DAT. The... (7 Replies)
Discussion started by: G.K.K
7 Replies

6. Shell Programming and Scripting

awk issue

Hi all, i am trying to use below command to see the output of hardware inventory, but i only see 2 first line no output of the command. awk '/Hardware/ {print $0}' XXX_result.txt Hardware inventory: Hardware inventory: any idea how to see whatever is under hardware inventory. i... (11 Replies)
Discussion started by: Jared
11 Replies

7. Shell Programming and Scripting

awk NR issue

Hi guys, i am trying to analyze a text file using awk and am not able to solve this issue. This is the piece of code that I have written BEGIN { ## Time to count MACs -> 5 seconds. TIME_LIMIT = 5; k = 50000; } ## For every line. { time_in_seconds = $1... (2 Replies)
Discussion started by: jamie_123
2 Replies

8. Shell Programming and Scripting

awk command issue

Hi, Please could someone advise the issue i have with my awk command ? my command is : export NUM_SCENARIOS=`awk -F= '!/^#/ && /NUM_SCENARIOS/{print $2}' /home/environment.properties` when I echo $NUM_SCENARIOS this comes back with : 100 10 The issue I have is, there is... (9 Replies)
Discussion started by: venhart
9 Replies

9. Shell Programming and Scripting

awk command in script gives error while same awk command at prompt runs fine: Why?

Hello all, Here is what my bash script does: sums number columns, saves the tot in new column, outputs if tot >= threshold val: > cat getnon0file.sh #!/bin/bash this="getnon0file.sh" USAGE=$this" InFile="xyz.38" Min="0.05" # awk '{sum=0; for(n=2; n<=NF; n++){sum+=$n};... (4 Replies)
Discussion started by: catalys
4 Replies

10. Shell Programming and Scripting

command line arg issue with awk

Hi friends, I am trying to pass input from command line and trying to print that column values. (FYI: I am using ksh) My code goes like this... #!/bin/sh column=$1 awk '{print $'$column'}' I execute using command like this --> ls -l | file_name parameter Hope I am clear with my... (2 Replies)
Discussion started by: divzz
2 Replies

Featured Tech Videos