Grep/awk/sed help


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Grep/awk/sed help
# 1  
Old 06-01-2013
Lightbulb Grep/awk/sed help

got a file as y.txt

1 abc,def,ghj
2 defj,abc.kdm,ijk
3 lmn,cbk,mno
4 tmp,tmop,abc,pkl
5 pri,chk,cbk,lmo
6 def,cbk.pro,abc.kdm

i want to search in the above file the key word like abc

looking for two outcomes by passing the parameter value as abc into function and the two outocmes are :

1) how many lines the abc is available. It should search only for abc and not abc.kdm.

count should be 2.

2) also the line numbers of the respective lines where abc is available like below.

1 abc,def,ghj
4 tmp,tmop,abc,pkl


ck.sh abc

it should give two outcomes

can someone give me the solution for this ?

---------- Post updated at 10:10 PM ---------- Previous update was at 10:06 PM ----------

all doing in bash
# 2  
Old 06-01-2013
Is this a homework item?
# 3  
Old 06-01-2013
no not home work item...

i replaced all the content with simple ones..but i need the logic and the code as i need to implement the same.
# 4  
Old 06-01-2013
Show us what have you tried so far. Share your thoughts and efforts.
# 5  
Old 06-01-2013
Is the line number in y.txt as shown:
Code:
1 abc,def,ghj
2 defj,abc.kdm,ijk
3 lmn,cbk,mno
4 tmp,tmop,abc,pkl
5 pri,chk,cbk,lmo
6 def,cbk.pro,abc.kdm

or is y.txt:
Code:
abc,def,ghj
defj,abc.kdm,ijk
lmn,cbk,mno
tmp,tmop,abc,pkl
pri,chk,cbk,lmo
def,cbk.pro,abc.kdm

and you added the line numbers for discussion purposes?
I.e., if the input file were:
Code:
1 abc,def,ghj
4 tmp,tmop,abc,pkl
5 pri,chk,cbk,lmo

Would the output be:
Code:
1 abc,def,ghj
4 tmp,tmop,abc,pkl

or:
Code:
1 4 tmp,tmop,abc,pkl[

(since "1 abc" does not match "abc")?

If the line numbers are present in your input file, are the line numbers part of the 1st field, or are they a separate field delimited by a space instead of by a comma?

Will any of your comma separated fields (possibly other than the 1st field) ever contain spaces or tabs?
# 6  
Old 06-01-2013
line numbers are different there....not in order

so what ever the numbers are there it should display.

i did some work but as a normal commands its working.

like
Code:
export param=abc

awk -F"," -v searchStr=$param '{for(idx=1;idx<=NF; ++idx) {if($idx == searchStr) {print $0;}}}' y.txt


output coming as :
Code:
1 abc,def,ghj
4 tmp,tmop,abc,pkl

which is expected and thats what i want.

but

when i execute the same in sh file where i pass the parameter to search as abc, which is getting consider as $1,

the above command print $0 in awk is getting messed up.

not sure if thre is any other way as i want to execute in some function by passing the parameter.

---------- Post updated at 11:37 PM ---------- Previous update was at 11:33 PM ----------

its like

Code:
./ck.sh abc

content as :
param =$1

awk -F"," -v searchStr=$param '{for(idx=1;idx<=NF; ++idx) {if($idx == searchStr) {print $0;}}}' y.txt

the output is not working as print $0 is messed up there. with $1, $0 i guess.

---------- Post updated at 11:38 PM ---------- Previous update was at 11:37 PM ----------

there is space between the first column i.e. number and rest are comma separated strings in that line.

Last edited by Franklin52; 06-03-2013 at 02:57 AM.. Reason: Please use CODE tags
# 7  
Old 06-01-2013
First: Please use CODE tags.

Second, I'm VERY surprised that the awk script you're showing us printed:
Code:
1 abc,def,ghj
4 tmp,tmop,abc,pkl

With -F",", the 1st line should not have been printed because 1 abcis not equal to abc.

So, you're close, but:
  1. shell assignments can't have spaces, so change:
    Code:
    param =$1

    to:
    Code:
    param="$1"

    (Note: Always protect yourself against malformed user input.)
  2. with FS set to comma, field 1 in line 1 is "1 abc"; not "abc", so change:
    Code:
    -F"," -v searchStr=$param

    to:
    Code:
    -F"[ ,]" -v searchStr="$param"

    and
  3. you don't print the match count, so add a counter that increments when you find a match and add an END clause to your awk script (i.g., END {print counter}).
Alternatively, here is a way to do it entirely in the shell if your shell is bash or ksh:
Code:
lc=0
while IFS="" read -r line
do      IFS=" ," f=( $line )
        for ((i=${#f[@]} - 1; i > 0; i--))
        do      if [ x"$1" = x"${f[$i]}" ]
                then    printf "%s\n" "$line"
                        ((lc++))
                        break
                fi
        done
done < y.txt
printf "%s found on %d lines.\n" "$1" $lc

Note that this script will only print a line once if $1 appears more than once on a line; your awk script would print it multiple times in this case. With your sample input, the output produced when $1 is "abc" is:
Code:
1 abc,def,ghj
4 tmp,tmop,abc,pkl
abc found on 2 lines.

when given the input you specified in the 1st message in this thread.

Hope this helps.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

grep? awk? sed? I don't know

Hi everyone! I have a file like this And I would like to find the Medium label when the value "last write" is "Jan 14" (it's could be another value like "jan 6") I really don't know what way to use to solve this problem... Thanks! (5 Replies)
Discussion started by: Castelior
5 Replies

2. UNIX for Dummies Questions & Answers

grep/awk/sed?

Thread1 { x = 2 y = 10485 } Thread2 { x = 16 y = 1048 } Thread3 { x = 1 y = 1049 } Thread4 { x = 4 y = 1047 z = 500 } Suppose the above is a piece of code. I need to automate and verify that the value of x under Thread1's 2. There are several... (3 Replies)
Discussion started by: foxtron
3 Replies

3. Shell Programming and Scripting

help using sed/awk/grep

thanks for your reply. but i'm not quite sure what your code is doing. i may be using it wrong but i'm not getting what i'm supposed to get. could you please elaborate? thanks again, (6 Replies)
Discussion started by: kratos.
6 Replies

4. Shell Programming and Scripting

grep or awk or sed not sure which to use here

Hi All, I have a huge file, I need to two things from this file. I need to know the IP address or the hostname and second thing is the date&time. The file looks like this and I need to get my data from this... Trying... Connected to 204.109.172.117. Escape character is '^]'. Fri... (4 Replies)
Discussion started by: samnyc
4 Replies

5. UNIX for Dummies Questions & Answers

awk grep sed or something better

Hello all, Can anyone help with the following? :) I have file1 with 150,000 words in a list and file2 with 148,000 words in a list - all of which are in file1. I want to create a new file with the words that DO NOT match (i.e of 2000 words). I have done this very simple command , which is... (1 Reply)
Discussion started by: dr_sabz
1 Replies

6. UNIX for Dummies Questions & Answers

How could i get this by sed or grep or awk ????

------------------------------------------------------------------ Ex of Warning messgae,(Many similar lines occure for Both Test and Test1) -WARNING:Below Field not implemented in file File name: /home/test/ new/file1, msg buffer is: :Test:000948 ... (1 Reply)
Discussion started by: prsam
1 Replies

7. UNIX for Dummies Questions & Answers

Grep Sed or Awk?

I have two .txt files one called good.txt and the other one is called bad.txt. Both contain email addresses in the following format: john@john.com bob@bob.com sarah@sarah.com Basically, I want to scrub good.txt against bad.txt and save the resulting output in scrubbed.txt meaning that if... (2 Replies)
Discussion started by: holyearth
2 Replies

8. UNIX for Dummies Questions & Answers

Awk, Sed and Grep

Hello. I am an older newbie trying to learn Unix. I have a task to perform and it entails counting lines of code. Currently, I am pointing to the directory where the files are contained and performing a 'find' on the file extensions (cpp, c, html, java, etc.) and piping that info with a 'wc -l'.... (2 Replies)
Discussion started by: mastachef
2 Replies

9. Shell Programming and Scripting

Sed | Awk | Grep

Can someone help me in understanding when to use SED, AWK and GREP (3 Replies)
Discussion started by: kn.naresh
3 Replies

10. Shell Programming and Scripting

need help!!!awk,grep,sed

hi all by using cat /etc/passwd I've got these output. ajh1ect:x:839:501:Anthony:/home/ajh1ect:/bin/bash mjb1ect:x:840:501:Michael:/home/mjb1ect:/bin/bash mv3ect:x:841:501:Marian:/home/mv3ect:/bin/bash now I want to see just the user ID and group ID. so what is the code will be with... (2 Replies)
Discussion started by: nokia1100
2 Replies
Login or Register to Ask a Question