08-24-2009
dynamically change awk Field Separator FS
Hi All,
I was wondering if anyone knew how to dynamically change the FS in awk to accept vairiable containing a field separator. the current code is as below and does not work when i introduce the dynamic FS change :-(
validate_source_file()
{
source_file=$1
datetimestamp=`date +"%Y%m%d%H%M%S"`
invalid_file=$2_$datetimestamp.dat
field_count=$3
file_delimeter=$4
#awk 'BEGIN{ FS="|"; } {
awk 'BEGIN{ FS=file_delimeter; } {
if ( NF != field_count ) {
invalid_rec_count+=1 ;
#
# print the header for the bad file once....then start printing the invalid records to the same file...
#
print $0 > invalid_file ;
}
else {
valid_rec_count+=1 ;
}
}
END { printf "%-10s\t\n%-10s\t\n%-10s\t\n","Total Lines Read ["NR"]","Valid Records Found ["valid_rec_count"]","Invalid Records Found ["invalid_rec_count"]" ;
if (invalid_rec_count>1) {
print " "
print "Please refer to file "invalid_file" for full invalid record set."
}
}
' invalid_file="$invalid_file" field_count="$field_count" file_delimiter="$file_delimeter" $source_file
}
so when I call it i would want to pass a 4th parameter like:
validate_source_file "$filenamedir" "$source_tabin_name" "$field_count" ","
or
validate_source_file "$filenamedir" "$source_tabin_name" "$field_count" "|"
Any ideas appreciated!
Regards
Satnam
10 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
Hi, All,
I wonder how to change the field separator of grep from : to space when use grep to display.
for example when I use
grep -e 'pattern1' -e 'pattern2' -n filename
to find patterns, it use : to separate patterns, but I want to use blank space. is there an option I can set to... (2 Replies)
Discussion started by: Jenny.palmy
2 Replies
2. UNIX for Dummies Questions & Answers
Hi Friends,
Scripting newb here. So I'm trying to create a geektool script that uses awk and printf to output certain fields from top (namely command, cpu%, rsize, pid and time, in that order).
Here's the input from the top process that I'm putting into awk:
PID COMMAND %CPU ... (3 Replies)
Discussion started by: thom.mattson
3 Replies
3. Shell Programming and Scripting
Hi
I need to check if field separator I am using in awk statement is " : ", for example:
TIME=12:59
HOUR=`echo "$TIME" | awk '{FS=":"; print $1}'`
MINUTES=`echo "$TIME" | awk '{FS=":"; print $2}'`
Is there a way to check within the above awk statement ?
Thanks for help -A (2 Replies)
Discussion started by: aoussenko
2 Replies
4. Shell Programming and Scripting
Hi;
i have a file and i want to get;
- If the last word in line 14 is NOT equal to "Set."; then print 2nd, 3rd, 4th and 5th values of 3rd line.
and my code is:
nawk 'NR==14 {if ($NF!="Set.") (NR==3{print $2,$3,$4,$5}) }' file.txt
but no result?? :confused::(:confused::( (4 Replies)
Discussion started by: gc_sw
4 Replies
5. Shell Programming and Scripting
Hi, all
I need to get fields in a line that are separated by commas, some of the fields are enclosed with double quotes, and they are supposed to be treated as a single field even if there are commas inside the quotes.
sample input:
for this line, 5 fields are supposed to be extracted, they... (8 Replies)
Discussion started by: kevintse
8 Replies
6. UNIX for Dummies Questions & Answers
Hi !
input:
111|222|333|aaa|bbb|ccc
999|888|777|nnn|kkk
444|666|555|eee|ttt|ooo|ppp
With awk, I am trying to change the FS "|" to "; " only from the 4th field until the end (the number of fields vary between records).
In order to get:
111|222|333|aaa; bbb; ccc
999|888|777|nnn; kkk... (1 Reply)
Discussion started by: beca123456
1 Replies
7. Shell Programming and Scripting
I am using this code to insert something into a csv file:
awk -F";" -v url=$url -v nr=$nr 'NR==nr{$2=url$2}1' file
Why do I get the output
field1 field2
instead of
field1;field2
I have given -F";", so the field separator should surely be ";". (1 Reply)
Discussion started by: locoroco
1 Replies
8. Shell Programming and Scripting
I need to set awk field separator to ";", but I need to avoid ";EXT".
so that
echo a;b;c;EXTd;e;f | awk -F";" '{print $3}'
would give "c;EXTd" (2 Replies)
Discussion started by: locoroco
2 Replies
9. Shell Programming and Scripting
Hi Experts ,
file :
- How to construct the awk filed separator so that $1, $2 $3 , can be assigned to the each "" range.
I am trying : awk -F"]" '{print $1}'
but it is printing the entire file. Not first field.
The desired output needed for first field... (9 Replies)
Discussion started by: rveri
9 Replies
10. UNIX for Beginners Questions & Answers
Hi, can some some help to get me the right results,
I have few text files, need to grep few columns from each file and get the results in one row with comma separated.
my code is
#folder=/nz/kit/log/backupsvr
folder=/export/home/nz/valai/tmpfiles/
echo $folder
for entry in `ls... (4 Replies)
Discussion started by: ValaiG
4 Replies
LEARN ABOUT NETBSD
field_count
FORMS(3) BSD Library Functions Manual FORMS(3)
NAME
field_count, form_fields, move_field, set_form_fields -- form library
LIBRARY
Curses Form Library (libform, -lform)
SYNOPSIS
#include <form.h>
int
field_count(FORM *form);
FIELD **
form_fields(FORM *form);
int
move_field(FIELD *field, int frow, int fcol);
int
set_form_fields(FORM *form, FIELD **fields);
DESCRIPTION
The field_count() function returns the number of fields that are attached to the given form, if the form argument passed is NULL then
field_count() will return -1. The function form_fields() will return a pointer to array of attach fields for the given form, this array is
not NULL terminated, fields may be attached to the given form by calling set_form_fields(). The fields argument in this function is a
pointer to a NULL terminated array of fields that will be attached to the form. If there are already fields attached to the form then they
will be detached before the new fields are attached. The new fields given must not be attached to any other form. The move_field() function
will move the given field to the location specified by frow and fcol.
RETURN VALUES
Functions returning pointers will return NULL if an error is detected. The functions that return an int will return one of the following
error values:
E_OK The function was successful.
E_CONNECTED The field is connected to a form.
E_POSTED The form is currently posted to the screen.
E_BAD_ARGUMENT The function was passed a bad argument.
SEE ALSO
curses(3), forms(3)
NOTES
The header <form.h> automatically includes both <curses.h> and <eti.h>.
BSD
January 1, 2001 BSD