Using awk to read a specific line and a specific field on that line.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Using awk to read a specific line and a specific field on that line.
# 1  
Old 07-30-2011
Using awk to read a specific line and a specific field on that line.

Say the input was as follows:

Brat 20 x 1000 32rf
Pour 15 p 1621 05pr
Dart 10 z 1111 22xx

My program prompts for an input, what I want is to use the input to locate a specific field. Like if I type in, "Pou" then it would return "Pour" and just "Pour"

I currently have this line but it is not giving an output.
Code:
                        
var=`grep -c $search filename`
awk  'NR==$var{print $1}' filename

I am using the count for the line number and trying to get the first field. Not working though.
Any suggestions, changes or thoughts?
# 2  
Old 07-30-2011
GNU grep:
Code:
pat='Pou'
grep -o "${pat}[^ ]*" INPUTFILE

# 3  
Old 07-30-2011
what if I wanted to get the first two fields which are both strings and my search only consists of the first field?
# 4  
Old 07-30-2011
I'd use awk, but that's a matter of personal preference. This is the simplest form which will find your search string anywhere on the record:

Code:
awk -v what=$search '
    { if( index(  $1, what ) )   # record contains string
        print $1, $2;                # print any part of the record desired
    }
'

If you need to search for a regular expression, then you could use match() instead of index.
# 5  
Old 07-30-2011
Code:
awk -vpat="$pat" '$0 ~ pat {print $1, $2}' INPUTFILE

You can change pat (for example $0 ~ "^" pat "[A-Za-z]*" and output as you like.
# 6  
Old 07-31-2011
Thanks, that worked perfectly

---------- Post updated 07-31-11 at 12:23 PM ---------- Previous update was 07-30-11 at 10:59 PM ----------

I have a new problem regarding reading a specific line and a specific field. But now I want to replace the first two fields. I tried this because it looked reasonable:

Code:
sed -i "s/$searchName\ $2/$name\ $lname/g" database.txt

John Wall 21 xf gdm

user input to change name: Peter Pan

output becomes

Peter PanWall


I got rid of John but I couldn't get rid of Wall.
# 7  
Old 07-31-2011
Quote:
Originally Posted by Bungkai

Code:
sed -i "s/$searchName\ $2/$name\ $lname/g" database.txt

This works for me assuming that searchName == John, $2 == Wall. If you've invoked your script with just John on the command line, $2 will be null, then you'll end up with the results that you posted. The small script I wrote to test your code includes some error checking that might be beneficial in your case so I've posted it as an example.

Code:
#!/usr/bin/env ksh

if [[ $# != 4 ]]
then
   echo "error: missing parms. expected:  name lastname newname new-lastname"
   exit 1
fi
searchName=$1
# $2 is not assigned and used directly later 
name=$3
lname=$4

sed  "s/$searchName\ $2/$name\ $lname/g" test.data

I would recommend assigning $2 to a named variable; while it is fine the way it is, it makes your script easier to read if it were something like this:

Code:
sed  "s/$searchName\ $searchLastname/$name\ $lname/g" test.data

I also don't believe that you need to escape the spaces. This should work:
Code:
sed  "s/$searchName $2/$name $lname/g" test.data

and again makes the code easier to read.

---------- Post updated at 13:13 ---------- Previous update was at 13:10 ----------

Thought I would also note that I dropped the -i from my testing because the version of sed that I prefer does not implement it. It should work just fine if you prefer to use that option.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk to combine all matching fields in input but only print line with largest value in specific field

In the below I am trying to use awk to match all the $13 values in input, which is tab-delimited, that are in $1 of gene which is just a single column of text. However only the line with the greatest $9 value in input needs to be printed. So in the example below all the MECP2 and LTBP1... (0 Replies)
Discussion started by: cmccabe
0 Replies

2. Shell Programming and Scripting

Add specific string to last field of each line in perl based on value

I am trying to add a condition to the below perl that will capture the GTtag and place a specific string in the last field of each line. The problem is that the GT value used is not right after the tag rather it is a few fields away. The values should always be 0/1 or 1/2 and are in bold in the... (12 Replies)
Discussion started by: cmccabe
12 Replies

3. Shell Programming and Scripting

How to print with awk specific field different from specific character?

Hello, i need help with awk. I have this file: cat number DirB port 67 er_enc_out 0 er_bad_os 0 DirB port 71 er_enc_out 56 er_bad_os 0 DirB port 74 er_enc_out 0 er_bad_os 0 DirB port 75 ... (4 Replies)
Discussion started by: elilmal
4 Replies

4. Shell Programming and Scripting

To read specific line from a file

Hi, I have a ldif file like below: version: 1 dn: cn=Test Group,ou=Applications,dc=xyz,dc=com objectClass: groupOfUniqueNames objectClass: top cn: Test Group uniqueMember: uid=abc,ou=People,o=xyz,o=Corporate,dc=xyz,dc=com dn: cn=Test Sub Group,cn=Test... (4 Replies)
Discussion started by: saurau
4 Replies

5. Shell Programming and Scripting

How to read particular line in file from specific column?

Hi...friends.... I want to create inventory...information for that I need to read some specific row say 2nd row from 1st 3 column and and write data with particular file used, I have some more column also but I need only 3 column data of first entry after header I attached sample file..those... (12 Replies)
Discussion started by: nex_asp
12 Replies

6. Shell Programming and Scripting

Update specific field in a line of text file

I have a text file like this: subject1:LecturerA:10 subject2:LecturerA:40 if I was given string in column 1 and 2 (which are subject 1 and LecturerA) , i need to update 3rd field of that line containing that given string , which is, number 10 need to be updated to 100 ,for example. The... (6 Replies)
Discussion started by: bmtoan
6 Replies

7. Shell Programming and Scripting

Replace specific field on specific line sed or awk

I'm trying to update a text file via sed/awk, after a lot of searching I still can't find a code snippet that I can get to work. Brief overview: I have user input a line to a variable, I then find a specific value in this line 10th field in this case. After asking for new input and doing some... (14 Replies)
Discussion started by: crownedzero
14 Replies

8. Shell Programming and Scripting

Counting rows line by line from a specific column using Awk

Dear UNIX community, I would like to to count characters from a specific row and have them displayed line-by-line. I have a file called testAwk2.csv which contain the following data: rabbit penguin goat giraffe emu ostrich I would like to count in the middle row individually... (4 Replies)
Discussion started by: vnayak
4 Replies

9. Shell Programming and Scripting

replacing field in specific line in a file

Hi, I know there are lots of threads on replacing text within files, usually using sed or awk. However, I find it hard to adapt examples that I found to my specific case. I am kind of new to UNIX and have hard times learning the syntax either for sed or awk so I would appreciate any help. Here's... (5 Replies)
Discussion started by: vytenis
5 Replies

10. Shell Programming and Scripting

How to append a character to the last but one field on a specific line?

Hi Guys, I have a file like this: aaa b c d e f fsss g h i k l qqq r t h n I want: aaa b c d e f fsss g h i k l qqq r t h , n ggg p t e d u qqq i o s , k (2 Replies)
Discussion started by: npatwardhan
2 Replies
Login or Register to Ask a Question