For Programmers: Free Programming Magazines  


Home > Archive > AWK > October 2006 > Suppress a field in a record









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Suppress a field in a record
testeurFou

2006-10-24, 3:55 am

I work on ldif file format.


I want to modify lines seems to

test1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbb
in
test1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbb
bbbbbbb

###################
--- Sample ---
test1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbb
test2: ccccccccccccccccccc
test3: dddddddddddddddddd
test4: eeeeeeeeeeeeeeeeeeeeeee

test11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
test12: ccccccccccccccccccc
ccccccccc
test13: dddddddddddddddddd

test21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbb
test22: ccccccccccccccccccc
test23: dddddddddddddddddd
--- End Sample ---

--- My Source ---
BEGIN {
RS=""
FS="\n"
OFS="\n"
ORS=""
}
{
print "\n\n##### BEFORE : \n"$0 "\n"
for ( i=1; i <=NF; i++) {
if (($i ~ /^ /)&&(i>1)) {
gsub("^ ","",$i)
gsub("\n ","",$i)
gsub("$\n","",$(i-1))
$(i-1) = $(i-1)$i
$(i)=""
}
}
print "##### AFTER : \n"$0 "\n"
}
--- End My Source ---

--- Output ---
##### BEFORE :
test1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbb
test2: ccccccccccccccccccc
test3: dddddddddddddddddd
test4: eeeeeeeeeeeeeeeeeeeeeee
##### AFTER :
test1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbb
bbbbbbb

test2: ccccccccccccccccccc
test3: dddddddddddddddddd
test4: eeeeeeeeeeeeeeeeeeeeeee


##### BEFORE :
test11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
test12: ccccccccccccccccccc
ccccccccc
test13: dddddddddddddddddd
##### AFTER :
test11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
test12: cccccccccccccccccccccccccccc

test13: dddddddddddddddddd


##### BEFORE :
test21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbb
test22: ccccccccccccccccccc
test23: dddddddddddddddddd
##### AFTER :
test21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbb
bbbbbbb

test22: ccccccccccccccccccc
test23: dddddddddddddddddd
--- End Output ---



The matter ? In my result, i have an empty filed. I want to suppress it
easily
I concatenate two fileds in one, but i don't know how i can suppress the
second filed for the output.
Is there an easy way ?

Thx



Ed Morton

2006-10-24, 7:56 am

testeurFou wrote:
> I work on ldif file format.
>
>
> I want to modify lines seems to
>
> test1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> bbbbbbbbbbbbbbbb
> in
> test1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbb
bbbbbbb
>
> ###################
> --- Sample ---
> test1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> bbbbbbbbbbbbbbbb
> test2: ccccccccccccccccccc
> test3: dddddddddddddddddd
> test4: eeeeeeeeeeeeeeeeeeeeeee
>
> test11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> test12: ccccccccccccccccccc
> ccccccccc
> test13: dddddddddddddddddd
>
> test21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> bbbbbbbbbbbbbbbb
> test22: ccccccccccccccccccc
> test23: dddddddddddddddddd
> --- End Sample ---
>
> --- My Source ---
> BEGIN {
> RS=""
> FS="\n"
> OFS="\n"
> ORS=""
> }
> {
> print "\n\n##### BEFORE : \n"$0 "\n"
> for ( i=1; i <=NF; i++) {
> if (($i ~ /^ /)&&(i>1)) {
> gsub("^ ","",$i)
> gsub("\n ","",$i)
> gsub("$\n","",$(i-1))
> $(i-1) = $(i-1)$i
> $(i)=""
> }
> }
> print "##### AFTER : \n"$0 "\n"
> }
> --- End My Source ---
>
> --- Output ---
> ##### BEFORE :
> test1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> bbbbbbbbbbbbbbbb
> test2: ccccccccccccccccccc
> test3: dddddddddddddddddd
> test4: eeeeeeeeeeeeeeeeeeeeeee
> ##### AFTER :
> test1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbb
bbbbbbb
>
> test2: ccccccccccccccccccc
> test3: dddddddddddddddddd
> test4: eeeeeeeeeeeeeeeeeeeeeee
>
>
> ##### BEFORE :
> test11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> test12: ccccccccccccccccccc
> ccccccccc
> test13: dddddddddddddddddd
> ##### AFTER :
> test11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> test12: cccccccccccccccccccccccccccc
>
> test13: dddddddddddddddddd
>
>
> ##### BEFORE :
> test21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> bbbbbbbbbbbbbbbb
> test22: ccccccccccccccccccc
> test23: dddddddddddddddddd
> ##### AFTER :
> test21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbb
bbbbbbb
>
> test22: ccccccccccccccccccc
> test23: dddddddddddddddddd
> --- End Output ---
>
>
>
> The matter ? In my result, i have an empty filed. I want to suppress it
> easily
> I concatenate two fileds in one, but i don't know how i can suppress the
> second filed for the output.
> Is there an easy way ?
>
> Thx


It sounds like you're saying you just want to append every line that
starts with a space onto the preceeding line after stripping the leading
spaces. If so, one way to do that would be:

$ awk '
/^ / { sub(/^ */,""); out = out $0; next }
out { print out }
/^$/ { print; next }
{ out = $0; next }
END { if (out) print out }
' file

Regards,

Ed.
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com