07-20-2009
Pass input and output file as parameter to awk script
Hi,
i am new to awk. I am using csv2pipe script(shown below)
BEGIN { FS=SUBSEP; OFS="|" }
{
result = setcsv($0, ",")
print
}
# setcsv(str, sep) - parse CSV (MS specification) input
# str, the string to be parsed. (Most likely $0.)
# sep, the separator between the values.
#
# After a call to setcsv the parsed fields are found in $1 to $NF.
# setcsv returns 1 on sucess and 0 on failure.
#
# By Peter Strvmberg aka PEZ.
# Based on setcsv by Adrian Davis. Modified to handle a separator
# of choice and embedded newlines. The basic approach is to take the
# burden off of the regular expression matching by replacing ambigious
# characters with characters unlikely to be found in the input. For
# this the characters "\035".
#
# Note 1. Prior to calling setcsv you must set FS to a character which
# can never be found in the input. (Consider SUBSEP.)
# Note 2. If setcsv can't find the closing double quote for the string
# in str it will consume the next line of input by calling
# getline and call itself until it finds the closing double
# qoute or no more input is available (considered a failiure).
# Note 3. Only the "" representation of a literal quote is supported.
# Note 4. setcsv will probably missbehave if sep used as a regular
# expression can match anything else than a call to index()
# would match.
#
function setcsv(str, sep, i) {
gsub(/""/, "\035", str)
gsub(sep, FS, str)
while (match(str, /"[^"]*"/)) {
middle = substr(str, RSTART+1, RLENGTH-2)
gsub(FS, sep, middle)
str = sprintf("%.*s%s%s", RSTART-1, str, middle,
substr(str, RSTART+RLENGTH))
}
if (index(str, "\"")) {
return ((getline) > 0) ? setcsv(str (RT != "" ? RT : RS) $0, sep) : !setcsv(str "\"", sep)
} else {
gsub(/\035/, "\"", str)
$0 = str
for (i = 1; i <= NF; i++)
if (match($i, /^"+$/))
$i = substr($i, 2)
$1 = $1 ""
return 1
}
}
I run it as
nawk -f csv2pipe.awk raw.txt
It works fine but gives the ouput on the console. I need it on the $1 parameter.
how should I modify "print" in the script so that the output is received on $1 instead of console.
I tried the following:
print > $1 ---> Doesn't work
print > "temp" --> Creates a new file temp and saves the output
Can anybody please help me out.
Thanks in advance.
10 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
Hi,
Can i pass a parameter(not a file name) as a parameter to a awk program?
eg;
$awk -f test 1 2 3
here test is the filename...and 1,2,3 are the i/p parameters?
thank you:-) (2 Replies)
Discussion started by: unisam
2 Replies
2. Shell Programming and Scripting
Hi, I am trying to write a ftp script which will read a file for filenames and ftp those files to another server. Here's my ftp script, but it's scanning the current directory for file names.
My question is how can I pass multiple files (these files will have the name of data files that need to... (0 Replies)
Discussion started by: sajjad02
0 Replies
3. Shell Programming and Scripting
hi guys
i need your help , i wrote one script which is as below
#!/bin/ksh
###########################################################
LOGDIR=/export/home/xyz/logs
EMAILFile=$LOGDIR/xxs_email.log
BOX=$(uname -a | awk '{print $2}')
awk '{if ($4 >= 30) {print $1 " " $3 " HAS LAG of "... (1 Reply)
Discussion started by: tapia
1 Replies
4. Shell Programming and Scripting
Hi All,
I am hoping someone can help me with some scripting I need to complete using AWK.
I'm trying to process multiple fixed files to generate one concatenated fixed file in a standard format.
The Input file is:-
aaaa bbbbb ccccc 1 xxxx aaa bbb
aaaa bbbbb ccccc 2 abcd aaa CCC... (9 Replies)
Discussion started by: jason_v_brown
9 Replies
5. Shell Programming and Scripting
Dear all
Does anybody know how to pass the password as input parameter to scp or rsync in unix scripts?
I have tried echo <password> | scp filename username@<ip address>:/filepath/ .
But it does not work.
BTW, I dont want to setup ssh trust between servers in this adhoc task.
Regards,... (2 Replies)
Discussion started by: eldonlck
2 Replies
6. Post Here to Contact Site Administrators and Moderators
Variable I have in my shell script
diff=$1$2.diff
id=$2
new=new_$diff
echo "My id is $1"
echo "I want to sync for user account $id"
##awk command I am using is as below
cat $diff | awk -F'~' ''$2 == "$id"' {print $0}' > $new
I could see value of $id is not passing to the awk... (0 Replies)
Discussion started by: Ashunayak
0 Replies
7. Shell Programming and Scripting
Hi,
I have an XML file like the following...
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ONDEMAND_JOB VERSION="5.1" LOCALE="en_US">
<IMPORT_JOBSET TC_CONNECTION_NAME="default" ENVIRONMENT="PRD" USERNAME="Administrator" PASSWORD="AdminPassword" CALENDAR="Main Monthly Calendar"... (2 Replies)
Discussion started by: Debalina Roy
2 Replies
8. Shell Programming and Scripting
Hi,
I have an XML file like the following...
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ONDEMAND_JOB VERSION="5.1" LOCALE="en_US">
<IMPORT_JOBSET TC_CONNECTION_NAME="default" ENVIRONMENT="PRD" USERNAME="Administrator" PASSWORD="AdminPassword" CALENDAR="Main Monthly Calendar"... (3 Replies)
Discussion started by: Debalina Roy
3 Replies
9. Shell Programming and Scripting
OS version: RHEL 6.7
myTextFile.txt file is referred within Script1.sh script,
I only execute Script1.sh and I want the input variable to be passed inside myTextFile.txt . Any idea how I can do this ?
$ cat script1.sh
cat myTextFile.txt
$ cat myTextFile.txt
$1
Requirement1.... (4 Replies)
Discussion started by: kraljic
4 Replies
10. UNIX for Beginners Questions & Answers
//file begin =====
//some code
task abcd_;
input x;
input y,z; //some comment
output w; //some comment
reg p;
integer q;
begin
//some code
end
endtask : abcd_
//some code
//file end =====
expected output from above... (1 Reply)
Discussion started by: rishifrnds
1 Replies
LEARN ABOUT PHP
db2_escape_string
DB2_ESCAPE_STRING(3) 1 DB2_ESCAPE_STRING(3)
db2_escape_string - Used to escape certain characters
SYNOPSIS
string db2_escape_string (string $string_literal)
DESCRIPTION
Prepends backslashes to special characters in the string argument.
PARAMETERS
o $string_literal
- The string that contains special characters that need to be modified. Characters that are prepended with a backslash are x00,
,
, , ', " and x1a.
RETURN VALUES
Returns $string_literal with the special characters noted above prepended with backslashes.
EXAMPLES
Example #1
A db2_escape_string(3) example
Result of using the db2_escape_string(3) function
<?php
$conn = db2_connect($database, $user, $password);
if ($conn) {
$str[0] = "All characters: x00 ,
,
, , ' , " , x1a .";
$str[1] = "Backslash (). Single quote ('). Double quote (")";
$str[2] = "The NULL character must be quoted as well";
$str[3] = "Intersting characters: x1a , x00 .";
$str[4] = "Nothing to quote";
$str[5] = 200676;
$str[6] = "";
foreach( $str as $string ) {
echo "db2_escape_string: " . db2_escape_string($string). "
";
}
}
?>
The above example will output:
db2_escape_string: All characters: ,
,
, \ , ' , " , .
db2_escape_string: Backslash (\). Single quote ('). Double quote (")
db2_escape_string: The NULL character must be quoted as well
db2_escape_string: Intersting characters: , .
db2_escape_string: Nothing to quote
db2_escape_string: 200676
db2_escape_string:
SEE ALSO
db2_prepare(3).
PHP Documentation Group DB2_ESCAPE_STRING(3)