Printing from multiline output


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Printing from multiline output
# 1  
Old 09-05-2019
Printing from multiline output

Dear all,

I have below "ldapsearch" output

Code:
[v00000@10-119-225-51 ~]$ ldapsearch -D "CN=SVC-ACCOUNT,OU=SVC,OU=VDSI,OU=Non-Human,DC=Org,DC=com" -w secretword -H ldaps://org.com:636 -b DC=Org,DC=com -s sub uid=v00000 "(filter)" "displayName" "uid" "street"
# extended LDIF
#
# LDAPv3
# base <DC=Org,DC=com> with scope subtree
# filter: uid=v00000
# requesting: (filter) displayName uid street
#

# v00000, Org.com
dn: CN=v00000,OU=Accounts,DC=Org,DC=com
street:: UlBKRCwgQUJDIEJ1aWxkaW5nIDEwMCBDYW1wdXMtOSxEci4gS2FtYXRjaGkgUm9hZApOb3J0aCBWZWVyYW5hbSBTYWxhaSxQZXJ1bmd1ZGkgVmlsbGFnZQpUYW1pbG5hZHU=
displayName: Thangamani, Balamurugan
uid: v00000

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

I would like to print as below
The street value should be decoded with Base64 format using below command.
Code:
openssl enc -base64 -d <<< "UlBKRCwgQUJDIEJ1aWxkaW5nIDEwMCBDYW1wdXMtOSxEci4gS2FtYXRjaGkgUm9hZApOb3J0aCBWZWVyYW5hbSBTYWxhaSxQZXJ1bmd1ZGkgVmlsbGFnZQpUYW1pbhZHU="

So that final output should looks like

Code:
uid : displayName : street (after base64 decode)

Example:
Code:
v00000     :      Thangamani, Balamurugan      :        RPJD, ABC Building 100 Campus-9,Dr. Kamatchi Road, North Veeranam Salai,Perungudi Village Tamilnadu

Thanks
Bala
# 2  
Old 09-05-2019
... and what is your exact question and what code have you tried / attempted / written to accomplish your ask?

... and if you did attempt to write your own code, what were the results, error messages, etc?

... and if you did not attempt to write your own code, why not?
# 3  
Old 09-05-2019
Quote:
Originally Posted by Neo
... and what is your exact question and what code have you tried / attempted / written to accomplish your ask?

... and if you did attempt to write your own code, what were the results, error messages, etc?

... and if you did not attempt to write your own code, why not?
I want to display 3 different texts from the output which are not properly formated. I tried "|awk '/displayName/ {print $0}'" and i can filter one output at a time. So the ask is how to convert one text with Base64 decode and printer other two texts with desired format.
# 4  
Old 09-05-2019
So you question is:

Quote:
How to convert one text with Base64 decode and print the other two texts with the desired format?
The easy approach is to store each of the three texts / tokens you want to print in variables and then print a single string formatted as you wish.

I always process text like this in PHP (because I find PHP easier to read and maintain months and years after I write the scripts, but that's just me), so now that you have make it more clear what you want, I'll leave this to some of the great coders here who are into awk.

Thanks for clarifying.
# 5  
Old 09-05-2019
Like so?
Code:
awk -F:  '
/^(#| *$|search|result)/        {next
                                }
NF == 3                         {gsub (/^ | $/, "", $3)
                                 CMD = sprintf ("base64 -d << EOF\n" $3 "\nEOF\n")
                                 $3 = ""
                                 while (1 == CMD | getline X) $3 = $3 "\t" X
                                }
1
' OFS=: file
dn: CN=v00000,OU=Accounts,DC=Org,DC=com
street::    RPJD, ABC Building 100 Campus-9,Dr. Kamatchi Road    North Veeranam Salai,Perungudi Village    Tamilnadu
displayName: Thangamani, Balamurugan
uid: v00000

These 2 Users Gave Thanks to RudiC For This Post:
# 6  
Old 09-05-2019
With bash builtins:
Code:
#!/bin/bash
while read w1 line
do
  case $w1 in
  (uid:) uid=$line;;
  (displayName:) displayName=$line;;
  (street::) street=$(openssl enc -base64 -d <<< "$line" | tr '\n' ',');;
  esac
done < file
printf "%10s : %30s : %40s\n" \
"uid" "displayName" "street" \
"$uid" "$displayName" "$street"

You can replace < file with < <(ldapsearch ...)

Last edited by MadeInGermany; 09-05-2019 at 04:06 PM..
This User Gave Thanks to MadeInGermany For This Post:
# 7  
Old 09-06-2019
Quote:
Originally Posted by MadeInGermany
With bash builtins:
Code:
#!/bin/bash
while read w1 line
do
  case $w1 in
  (uid:) uid=$line;;
  (displayName:) displayName=$line;;
  (street::) street=$(openssl enc -base64 -d <<< "$line" | tr '\n' ',');;
  esac
done < file
printf "%10s : %30s : %40s\n" \
"uid" "displayName" "street" \
"$uid" "$displayName" "$street"

You can replace < file with < <(ldapsearch ...)
thank you very much. just one more tweaking is required. The street value sometimes has more than 1 line. how to capture if it contains two line as seen below?

Code:
[v00000@10-119-225-51 ~]$ ldapsearch -D "CN=SVC-ACCOUNT,OU=SVC,OU=VDSI,OU=Non-Human,DC=Org,DC=com" -w secretword -H ldaps://org.com:636 -b DC=Org,DC=com -s sub uid=v00000 "(filter)" "displayName" "uid" "street"
# extended LDIF
#
# LDAPv3
# base <DC=Org,DC=com> with scope subtree
# filter: uid=v00000
# requesting: (filter) displayName uid street
#

# v00000, Org.com
dn: CN=v00000,OU=Accounts,DC=Org,DC=com
street:: UlBKRCwgQUJDIEJ1aWxkaW5nIDEwMCBDYW1wdXMtOSxEci4gS2FtYXRjaGkgUm9hZApOb3J0aCBWZWVyYW5hbSBTYWxhaSxQZXJ1bmd1ZGkgVmlsbGFnZQpUYW1pbG5hZHU=
             UlBKRCwgQUJDIEJ1aWxkaW5nIDEwMCBDYW1wdXMtOSxEci4gS2FtYXRjaGkgUm9hZApOb3J0aCBWZWVyYW5hbSBTYWxhaSxQZXJ1bmd1ZGkgVmlsbGFnZQpUYW1pbG5hZHU=
displayName: Thangamani, Balamurugan
uid: v00000

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Printing the output of sed using a loop

So I am writing a bash script that will search a file line by line for unix timestamps, store all of the timestamps into an array, then check how many of those timestamps were created within the last hour, and finally increment a counter every time it finds a timestamp created within the last hour.... (6 Replies)
Discussion started by: jsikarin
6 Replies

2. Shell Programming and Scripting

awk printing output to new line

Hi I have a file profile.txt with the below input: {"atgUserId":"736f14c4-eda2-4531-9d40-9de4d6d1fb0f","firstName":"donna","lastName":"biehler","email":"schoolathome42@live.com","receiveEmail":"y es"}, {"atgUserId":"c3716baf-9bf8-42da-8a44-a13fff68d20f","firstName":"Gilberto... (6 Replies)
Discussion started by: ankur328
6 Replies

3. Programming

Printing Popen Output Using Windows 7

Hi Guys, I am new to python and I am trying to print ouput of Popen on my text screen (tkinter gui). I was able to make it work on Linux with this code: Linux: Working def PrintSomething2(): outputdata = commands.getstatusoutput("sudo fping -f host.list") for i in outputdata:... (2 Replies)
Discussion started by: tattoostreet
2 Replies

4. UNIX for Dummies Questions & Answers

Help with printing output format from a file

Hi, I need help in printing data in below format from file extensions with .dml, i have listed details below file name is test_temp.dml, location in /home/users/test01/test_temp.dml file content: sample_type= record decimal(",") test_type; date("DD-MM-YYYY")(",") test_date... (2 Replies)
Discussion started by: AAHinka
2 Replies

5. Shell Programming and Scripting

Printing a 2 column output using scripts

Hi, I'm fairly new to scripting and Unix. I'm having trouble printing the number of directories and number of files in all the directories in 2 columns using scripts. #!/bin/bash echo "# of Directories --------- # of Messages/Files " numDir= $(find . -type d | wc -l) numMsg= $(find .... (4 Replies)
Discussion started by: nuclearpenguin
4 Replies

6. Shell Programming and Scripting

Grabbing IP and zonename from multiline 'ifconfig' output

Hi There, I have a Solaris server that has a bunch of zones configured and I am trying to write a script that will take all interfaces other than the loopback ones (e.g. lo0:3 etc) and present them so that I can easily determine the zone that owns the IP So in the case of the following... (2 Replies)
Discussion started by: hcclnoodles
2 Replies

7. Shell Programming and Scripting

Printing output with interval between letters

I want to print/echo an output "This is the name of the game" where each letter will be printed/echoed after an interval of 1 sec (6 Replies)
Discussion started by: proactiveaditya
6 Replies

8. Shell Programming and Scripting

assigning a multiline grep output which has been piped through sed to a shell variabl

Hi, I wish to format the output of a grep command in such a way that sed will be able to handle the newline characters held in the output. Since sed does not allow newlines to be contained in a replacement pattern, that means adding a backslash '\' character to the end of each line from... (8 Replies)
Discussion started by: timculhane
8 Replies

9. Shell Programming and Scripting

printing output more than 13

i want to print the idle time of the users more than 10 days. for eg: my "w" command output is like below. -sh-3.00$ w 03:47:41 up 13 days, 16:59, 3 users, load average: 10.00, 10.00, 10.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root :0 - ... (2 Replies)
Discussion started by: Krrishv
2 Replies

10. Shell Programming and Scripting

Printing output to the monitor

Hi!, In my shell scripts, I always create a logfile by adding the following line in the beginning: exec >file.log 2>&1 This in turn directs all the output to this logfile till the script executes. But now, I have to write some output to the monitor for the users. So, i am doing it... (2 Replies)
Discussion started by: jyotipg
2 Replies
Login or Register to Ask a Question