On 12/16/2012 01:12 PM, Peter Bex wrote:
On Sun, Dec 16, 2012 at 06:48:35PM +0100, Andreas wrote:
With sed as startingpoint I figured it out.
Those 3 steps make the input files consumable for COPY
1. dos2unix
2. sed -i 's/[ \t]*$//'
3. sed -i 's/ / /g'
You can reduce this to one invocation by separating the commands
by a semicolon (or by passing multiple -e flags)
sed -i 's/[ \t]*$//;s/ / /g'
The input files get created by a simple windows batch where I can't
change anything.
It uses echo to attach a line of 4 parameters to those textfiles.
How would you manage if one or more of those parameters contained blanks
in some cases?
This doesn't appear, yet. But I consider this as luck. :}
The real column formats are ( TEXT, TEXT, DATE, TIME ).
Well, that's a bit trickier and my sed skills are rather rusty.
I'd probably use awk for these more complex tasks:
awk '/\(.*\)/ { gsub(/ +/, " "); } { print $0 }'
The "gsub" command acts like sed's "s" command with the "g" modifier.
By prefixing the block with the gsub command with a regex, it only
acts on that regex. The regex in this example only looks for an opening
and a closing paren anywhere on the line; you might need to tweak it
to more closely match your case. Alternatively, you could implement
a counter that skips the four lines (which can be done with both sed
and awk).
If it gets more complex than this, you can always write a proper
program in a "real" language to do it. This can be easier to maintain.
Cheers,
Peter
why not use the squeeze option of tr.
tr -s " "
--
Stephen Clark
*NetWolves*
Director of Technology
Phone: 813-579-3200
Fax: 813-882-0209
Email: steve.cl...@netwolves.com
http://www.netwolves.com