awk - printing nth field based on parameter


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk - printing nth field based on parameter
# 1  
Old 06-18-2013
awk - printing nth field based on parameter

I have a need to print nth field based on the parameter passed. Suppose I have 3 fields in a file, passing 1 to the function should print 1st field and so on.

I have attempted below function but this throws an error due to incorrect awk syntax.

Code:
function calcmaxlen
{
 FIELDMAXLEN=0
 POSITION=$1
 while read LINE
 do
   FIELDLEN=$(echo $LINE | awk -v POS="$POSITION" '{print \$POS}' | wc -c)
   if [ $FIELDLEN -gt $FIELDMAXLEN ]
   then
     FIELDMAXLEN=$FIELDLEN
   fi
 done <$HOME/input.dat

}
# main
#####
calcmaxlen 1
echo "Maxmimum length of field 1 is:" $FIELDMAXLEN
calcmaxlen 2
echo "Maxmimum length of field 2 is:" $FIELDMAXLEN
calcmaxlen 3
echo "Maxmimum length of field 3 is:" $FIELDMAXLEN

The ultimate objective of this function is to calculate maximum length for each field.
# 2  
Old 06-18-2013
Awk does not use $ in variable
change $POS to POS
# 3  
Old 06-18-2013
Hi Jotne,

But to print nth field, I need a $ prefix right? $1 prints 1st field and so on. I am passing only the field position to awk.

Last edited by krishmaths; 06-18-2013 at 05:03 AM.. Reason: corrected text
# 4  
Old 06-18-2013
My fault
Remove the \
This works for me
Code:
POSITION=3
echo "test line is fine" | awk -v POS="$POSITION" '{print $POS}'
is

# 5  
Old 06-18-2013
I believe awk does support length function..

try

Code:
function calcmaxlen
{
 awk -v POS="$1" '{if(length($POS)>max){max=length($POS)}}END{print max}' $HOME/input.dat
}

This User Gave Thanks to pamu For This Post:
# 6  
Old 06-18-2013
Thanks pamu. I used the length function as you suggested and it works as expected now.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Problem with getting awk to multiply a field by a value set based on condition of another field

Hi, So awk is driving me crazy on this one. I have searched everywhere and read man, docs and every related post Google can find and still no luck. The actual files I need to run this on are sensitive in nature, but it is the same thing as if I needed to calculate weighted grades for multiple... (15 Replies)
Discussion started by: cotilloe
15 Replies

2. Shell Programming and Scripting

Printing string from last field of the nth line of file to start (or end) of each line (awk I think)

My file (the output of an experiment) starts off looking like this, _____________________________________________________________ Subjects incorporated to date: 001 Data file started on machine PKSHS260-05CP ********************************************************************** Subject 1,... (9 Replies)
Discussion started by: samonl
9 Replies

3. UNIX for Beginners Questions & Answers

Print lines based upon unique values in Nth field

For some reason I am having difficulty performing what should be a fairly easy task. I would like to print lines of a file that have a unique value in the first field. For example, I have a large data-set with the following excerpt: PS003,001 MZMWR/ L-DWD// * PS003,001... (4 Replies)
Discussion started by: jvoot
4 Replies

4. Shell Programming and Scripting

awk to adjust coordinates in field based on sequential numbers in another field

I am trying to output a tab-delimited result that uses the data from a tab-delimited file to combine and subtract specific lines. If $4 matches in each line then the first matching sequential $6 value is added to $2, unless the value is 1, then the original $2 is used (like in the case of line... (3 Replies)
Discussion started by: cmccabe
3 Replies

5. Shell Programming and Scripting

awk to update value in field based on another field

In the tab-delimeted input file below I am trying to use awk to update the value in $2 if TYPE=ins in bold, by adding the value of HRUN= in italics. In the below since in line 1 TYPE=ins the 117282541 value in $2 has 6 added because that is the value of HRUN=. Hopefully the awk is a start but I... (2 Replies)
Discussion started by: cmccabe
2 Replies

6. Shell Programming and Scripting

Replace a value of Nth field of nth row

Using Awk, how can I achieve the following? I have set of record numbers, for which, I have to replace the nth field with some values, say spaces. Eg: Set of Records : 4,9,10,55,89,etc I have to change the 8th field of all the above set of records to spaces (10 spaces). Its a delimited... (1 Reply)
Discussion started by: deepakwins
1 Replies

7. Shell Programming and Scripting

Awk product of nth field

How do I do the product of nth filed just like sum. For sum I know like awk '{ sum += $12 } END {printf "%.2f\n", sum}' works as initial sum = 0. But for product how do initialize the variable to 1? (2 Replies)
Discussion started by: madhavb
2 Replies

8. Shell Programming and Scripting

How to Print from nth field to mth fields using awk

Hi, Is there any short method to print from a particular field till another filed using awk? Example File: File1 ==== 1|2|acv|vbc|......|100|342 2|3|afg|nhj|.......|100|346 Expected output: File2 ==== acv|vbc|.....|100 afg|nhj|.....|100 (8 Replies)
Discussion started by: machomaddy
8 Replies

9. Shell Programming and Scripting

how to find the nth field value in delimiter file in unix using awk

Hi All, I wanted to find 200th field value in delimiter file using awk.? awk '{print $200}' inputfile I am getting error message :- awk: The field 200 must be in the range 0 to 199. The source line number is 1. The error context is {print >>> $200 <<< } using... (4 Replies)
Discussion started by: Jairaj
4 Replies

10. Shell Programming and Scripting

awk substitute variable value in nth field

I have a large csv file that looks like this: The 3rd field is a unix time stamp that I want to convert to human readable. I wrote a bash script with this code: IFS=$',' cat $1 | while read ID user DATE text flags read; do echo -e "$ID,$user,$(date -d @$DATE),$text,$flags,$read... (3 Replies)
Discussion started by: stumpyuk
3 Replies
Login or Register to Ask a Question