AWK help


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting AWK help
# 1  
Old 10-24-2010
AWK help

I've been trying to write a program in AWK for almost hours now to no avail and hence, I'm asking for help! so please help!

The program that I'm writing is meant to be an executable that accepts only one argument. The argument supplied to this program is then searched in a file and if it matches anything within this file, the line is printed onto the screen.

So, for instance, the following command:

awkprogram keyword

will return any lines within a file that contains the word keyword.

Now, the problems I'm facing!

Firstly, I cannot seem to find any way of embedding a file within the awk program so it can open it from within the script. I tried this:

Code:
#!/bin/awk -f filename

at the beginning of the script but it returned as file not found.

I then tried to dig other things and came across getfile but that doesn't do anything for me either.

I then decided to give up the search and instead supplied the argument for the filename in the command so I could get the rest of the script to work and it just won't do what I want it to

I supply the command
Code:
awkprogram filename keyword

I then use an if statement for the program to find the keyword by using the ARGV built-in array but it doesn't find anything. This is probably the sanest variation I tried and it brought nothing on the screen:
Code:
BEGIN {name = ARGV[2]}
if ($0 ~ /name/)
print
delete ARGV[2]

Can anyone please help? I just want to learn 1) how to open a file from within an awk script for execution and 2) how to find a pattern supplied to it from the command line in the form of an argument.

Any help or a lead in the right direction is much appreciated!

Thank you
# 2  
Old 10-24-2010
Code:
awk -vP="$1" '($0~P)' my_file

# 3  
Old 10-24-2010
Quote:
Originally Posted by ctsgnb
Code:
awk -vP="$1" '($0~P)' my_file

can you elaborate on that? It went over my head. AWK dummy here Smilie
# 4  
Old 10-24-2010
Code:
[ctsgnb@shell ~]$ cat my_test
#!/usr/bin/ksh
[[ $# -ne 2 ]] && echo "usage : $0 <keyword> <filename>" && exit 1
awk -vP="$1" '($0~P)' $2
[ctsgnb@shell ~]$ ksh my_test
usage : my_test <keyword> <filename>
[ctsgnb@shell ~]$ ksh my_test toto /tmp/list
sample toto
totot
hfdsjk toto fkldsmqkflms
totojfdkslqf
jfkdlstoto
jfkdlsqtotoklmqsfkmqds
toto
[ctsgnb@shell ~]$ cat /tmp/list
test
sample toto
titi
totot
hfdsjk toto fkldsmqkflms
totojfdkslqf
fjdklsq
jkdsql
jfkdlstoto
jfkdlsqtotoklmqsfkmqds
toto
[ctsgnb@shell ~]$



---------- Post updated at 02:22 AM ---------- Previous update was at 02:19 AM ----------




More simply, you can use the shell command:

Code:
grep $1 $2



---------- Post updated at 02:25 AM ---------- Previous update was at 02:22 AM ----------




Quote:
Originally Posted by kkhan00
can you elaborate on that? It went over my head. AWK dummy here Smilie
awk -vP="$1" '($0~P)' my_file
This set the first argument $1 of the script or function running that command into a variable (name randomly chosen) P
every line ($0) of my_file is check to see if match (~) the variable P if so, the default awk action is to print those that match the specified condition
# 5  
Old 10-24-2010
It works for me on the command prompt but I'm not sure if it works within my program. Are you using AWK or AWK and something else?

Here is how my program looks right now:
Code:
#!/bin/awk -f filename
BEGIN { 

FS = ":"
name = ARGV[1]
delete ARGV[1] 

}

{

if ($0 ~ name)
print

}

The name = ARGV[1] seems to work but it doesn't search for the pattern in the if statement. I see you are using -v to identify variables and I tried to use that preceding 'name' but it didn't work.

Also, the -f filename causes an error.



---------- Post updated at 07:33 PM ---------- Previous update was at 07:32 PM ----------




I know there are ways around it in grep and sed and even perl but this is actually a lab and I'm only stuck with using AWK



---------- Post updated at 08:07 PM ---------- Previous update was at 07:33 PM ----------




Okay, I figured it out! woohoo!

The one above works just fine in finding the pattern!

If anyone knows how I can get the script to open the file internally that will be grateful! I'll still try digging myself!

I want the program to only accept one argument, and then find that argument within a predefined file inside the script. the -f option gives me a file not found error each time.

Maybe I just need to find the right location? hm,m
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk output yields error: awk:can't open job_name (Autosys)

Good evening, Im newbie at unix specially with awk From an scheduler program called Autosys i want to extract some data reading an inputfile that comprises jobs names, then formating the output to columns for example 1. This is the inputfile: $ more MapaRep.txt ds_extra_nikira_usuarios... (18 Replies)
Discussion started by: alexcol
18 Replies

2. Shell Programming and Scripting

Pass awk field to a command line executed within awk

Hi, I am trying to pass awk field to a command line executed within awk (need to convert a timestamp into formatted date). All my attempts failed this far. Here's an example. It works fine with timestamp hard-codded into the command echo "1381653229 something" |awk 'BEGIN{cmd="date -d... (4 Replies)
Discussion started by: tuxer
4 Replies

3. Shell Programming and Scripting

Passing awk variable argument to a script which is being called inside awk

consider the script below sh /opt/hqe/hqapi1-client-5.0.0/bin/hqapi.sh alert list --host=localhost --port=7443 --user=hqadmin --password=hqadmin --secure=true >/tmp/alerts.xml awk -F'' '{for(i=1;i<=NF;i++){ if($i=="Alert id") { if(id!="") if(dt!=""){ cmd="sh someScript.sh... (2 Replies)
Discussion started by: vivek d r
2 Replies

4. Shell Programming and Scripting

HELP with AWK one-liner. Need to employ an If condition inside AWK to check for array variable ?

Hello experts, I'm stuck with this script for three days now. Here's what i need. I need to split a large delimited (,) file into 2 files based on the value present in the last field. Samp: Something.csv bca,adc,asdf,123,12C bca,adc,asdf,123,13C def,adc,asdf,123,12A I need this split... (6 Replies)
Discussion started by: shell_boy23
6 Replies

5. Shell Programming and Scripting

awk command to compare a file with set of files in a directory using 'awk'

Hi, I have a situation to compare one file, say file1.txt with a set of files in directory.The directory contains more than 100 files. To be more precise, the requirement is to compare the first field of file1.txt with the first field in all the files in the directory.The files in the... (10 Replies)
Discussion started by: anandek
10 Replies

6. Shell Programming and Scripting

Comparison and editing of files using awk.(And also a possible bug in awk for loop?)

I have two files which I would like to compare and then manipulate in a way. File1: pictures.txt 1.1 1.3 dance.txt 1.2 1.4 treehouse.txt 1.3 1.5 File2: pictures.txt 1.5 ref2313 1.4 ref2345 1.3 ref5432 1.2 ref4244 dance.txt 1.6 ref2342 1.5 ref2352 1.4 ref0695 1.3 ref5738 1.2... (1 Reply)
Discussion started by: linuxkid
1 Replies

7. Shell Programming and Scripting

Problem with awk awk: program limit exceeded: sprintf buffer size=1020

Hi I have many problems with a script. I have a script that formats a text file but always prints the same error when i try to execute it The code is that: { if (NF==17){ print $0 }else{ fields=NF; all=$0; while... (2 Replies)
Discussion started by: fate
2 Replies

8. Shell Programming and Scripting

awk: assign variable with -v didn't work in awk filter

I want to filter 2nd column = 2 using awk $ cat t 1 2 2 4 $ VAR=2 #variable worked in print $ cat t | awk -v ID=$VAR ' { print ID}' 2 2 # but variable didn't work in awk filter $ cat t | awk -v ID=$VAR '$2~/ID/ { print $0}' (2 Replies)
Discussion started by: honglus
2 Replies

9. Shell Programming and Scripting

scripting/awk help : awk sum output is not comming in regular format. Pls advise.

Hi Experts, I am adding a column of numbers with awk , however not getting correct output: # awk '{sum+=$1} END {print sum}' datafile 2.15291e+06 How can I getthe output like : 2152910 Thank you.. # awk '{sum+=$1} END {print sum}' datafile 2.15079e+06 (3 Replies)
Discussion started by: rveri
3 Replies

10. Shell Programming and Scripting

Awk problem: How to express the single quote(') by using awk print function

Actually I got a list of file end with *.txt I want to use the same command apply to all the *.txt Thus I try to find out the fastest way to write those same command in a script and then want to let them run automatics. For example: I got the file below: file1.txt file2.txt file3.txt... (4 Replies)
Discussion started by: patrick87
4 Replies
Login or Register to Ask a Question