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
IGAWK(1) Utility Commands IGAWK(1)
NAME
igawk - gawk with include files
SYNOPSIS
igawk [ all gawk options ] -f program-file [ -- ] file ...
igawk [ all gawk options ] [ -- ] program-text file ...
DESCRIPTION
Igawk is a simple shell script that adds the ability to have ``include files'' to gawk(1).
AWK programs for igawk are the same as for gawk, except that, in addition, you may have lines like
@include getopt.awk
in your program to include the file getopt.awk from either the current directory or one of the other directories in the search path.
OPTIONS
See gawk(1) for a full description of the AWK language and the options that gawk supports.
EXAMPLES
cat << EOF > test.awk
@include getopt.awk
BEGIN {
while (getopt(ARGC, ARGV, "am:q") != -1)
...
}
EOF
igawk -f test.awk
SEE ALSO
gawk(1)
Effective AWK Programming, Edition 1.0, published by the Free Software Foundation, 1995.
AUTHOR
Arnold Robbins (arnold@skeeve.com).
Free Software Foundation Nov 3 1999 IGAWK(1)