Convert rows to column and print output in required format


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Convert rows to column and print output in required format
# 1  
Old 11-06-2019
Convert rows to column and print output in required format

Hi All,

i am trying to print the solaris 11 packages in below required format, But i am unable to do that.

Current ouput :

Code:
root@abc# pkginfo -l | egrep '(BASEDIR|NAME|VERSION)' | awk '{print}' 
      NAME:  QLogic 570x/571x Gigabit Ethernet Driver
   VERSION:  11.11,REV=2009.11.11
   BASEDIR:  /
      NAME:  QLogic 57xxx 10/20GbE NIC Driver
   VERSION:  11.11,REV=2009.11.11
   BASEDIR:  /
      NAME:  HP Smart Array HBA Driver 2.4.4.1
   VERSION:  11.11,REV=2009.11.11
   BASEDIR:  /
      NAME:  cas_migrateconf - The migrateconf class action script for CSW packages
   VERSION:  1.50,REV=2015.01.17
   BASEDIR:  /
      NAME:  cas_preserveconf - The preserveconf class action script for CSW packages
   VERSION:  1.50,REV=2015.01.17
   BASEDIR:  /
      NAME:  common - common files and dirs for CSW packages
   VERSION:  1.5,REV=2010.12.11
   BASEDIR:  /
      NAME:  ggettext_data - GNU locale utilities, translation files
   VERSION:  0.19.8,REV=2016.09.08
   BASEDIR:  /
      NAME:  iconv_stub - Transitional package. Content moved to CSWlibcharset1 CSWlibiconv2
   VERSION:  1.14,REV=2011.08.08
   BASEDIR:  /
      NAME:  jq - A lightweight and flexible command-line JSON processor.
   VERSION:  1.4,REV=2014.09.07
   BASEDIR:  /
      NAME:  libbz2_1_0 - Compression library, libbz2.so.1.0
   VERSION:  1.0.6,REV=2011.08.18
   BASEDIR:  /
      NAME:  libcharset1 - GNU iconv charset library, libcharset.so.1
   VERSION:  1.14,REV=2011.08.07
   BASEDIR:  /
      NAME:  libiconv2 - GNU iconv library, libiconv.so.2
   VERSION:  1.14,REV=2011.08.07
   BASEDIR:  /
      NAME:  libidn11 - GNU IDN library, libidn.so.11
   VERSION:  1.33,REV=2016.09.05
   BASEDIR:  /


Desired output :

Code:
{"NAME":  "QLogic 570x/571x Gigabit Ethernet Driver",
   "VERSION":  "11.11,REV=2009.11.11",
   "BASEDIR":  "/"},
 { "NAME":  "QLogic 57xxx 10/20GbE NIC Driver",
   "VERSION":  "11.11,REV=2009.11.11",
   "BASEDIR":  "/"}

i tried to convert rows to column but with awk filter i am not able to print required fields data
Can someone please help me on this issue.

1)paste - - - < out
2)with awk syntax i am unable to print entire package name.

Moderator's Comments:
Mod Comment
Please use code tags when posting data and code samples!

Last edited by vgersh99; 11-06-2019 at 12:21 PM.. Reason: code tags, please!
# 2  
Old 11-06-2019
How about
Code:
awk -F: '
                {for (i=1; i<=NF; i++)  {gsub (/^ *| *$/, "", $i)
                                         $i = "\"" $i "\""
                                        }
                }
/NAME/          {print "{" $0 ","}
/VERSION/       {print     $0 ","}
/BASEDIR/       {print     $0 "}"}
' OFS=":" file

# 3  
Old 11-06-2019
Hi Rudic,

Thanks for the reply, But when i am trying to executing the script it's repeating each line output three times as well as it's missing double quotes in some places


Code:
{"NAME":"QLogic 570x/571x Gigabit Ethernet Driver         VERSION":"11.11,REV=2009.11.11          BASEDIR":"/",
"NAME":"QLogic 570x/571x Gigabit Ethernet Driver           VERSION":"11.11,REV=2009.11.11          BASEDIR":"/",
"NAME":"QLogic 570x/571x Gigabit Ethernet Driver           VERSION":"11.11,REV=2009.11.11          BASEDIR":"/"}

Desired ouput :

Code:
{"NAME":"QLogic 570x/571x Gigabit Ethernet Driver",         "VERSION":"11.11,REV=2009.11.11",        "BASEDIR":"/"}


Last edited by balu1234; 11-06-2019 at 01:25 PM..
# 4  
Old 11-06-2019
if on Solaris, use either nawk or /usr/xpg4/bin/awk
# 5  
Old 11-06-2019
thanks vgersh99 i am using nawk now but i am getting each line output three times as well as it's missing double quotes in some places


{"NAME":"QLogic 570x/571x Gigabit Ethernet Driver VERSION":"11.11,REV=2009.11.11 BASEDIR":"/",
"NAME":"QLogic 570x/571x Gigabit Ethernet Driver VERSION":"11.11,REV=2009.11.11 BASEDIR":"/",
"NAME":"QLogic 570x/571x Gigabit Ethernet Driver VERSION":"11.11,REV=2009.11.11 BASEDIR":"/"}

Desired ouput :

{"NAME":"QLogic 570x/571x Gigabit Ethernet Driver", "VERSION":"11.11,REV=2009.11.11", "BASEDIR":"/"}
# 6  
Old 11-06-2019
Strange...
Given your sample input in post#1 and using RudiC's code, I get:
Code:
{"NAME":"QLogic 570x/571x Gigabit Ethernet Driver",
"VERSION":"11.11,REV=2009.11.11",
"BASEDIR":"/"}
{"NAME":"QLogic 57xxx 10/20GbE NIC Driver",
"VERSION":"11.11,REV=2009.11.11",
"BASEDIR":"/"}
{"NAME":"HP Smart Array HBA Driver 2.4.4.1",
"VERSION":"11.11,REV=2009.11.11",
"BASEDIR":"/"}
{"NAME":"cas_migrateconf - The migrateconf class action script for CSW packages",
"VERSION":"1.50,REV=2015.01.17",
"BASEDIR":"/"}
{"NAME":"cas_preserveconf - The preserveconf class action script for CSW packages",
"VERSION":"1.50,REV=2015.01.17",
"BASEDIR":"/"}
{"NAME":"common - common files and dirs for CSW packages",
"VERSION":"1.5,REV=2010.12.11",
"BASEDIR":"/"}
{"NAME":"ggettext_data - GNU locale utilities, translation files",
"VERSION":"0.19.8,REV=2016.09.08",
"BASEDIR":"/"}
{"NAME":"iconv_stub - Transitional package. Content moved to CSWlibcharset1 CSWlibiconv2",
"VERSION":"1.14,REV=2011.08.08",
"BASEDIR":"/"}
{"NAME":"jq - A lightweight and flexible command-line JSON processor.",
"VERSION":"1.4,REV=2014.09.07",
"BASEDIR":"/"}
{"NAME":"libbz2_1_0 - Compression library, libbz2.so.1.0",
"VERSION":"1.0.6,REV=2011.08.18",
"BASEDIR":"/"}
{"NAME":"libcharset1 - GNU iconv charset library, libcharset.so.1",
"VERSION":"1.14,REV=2011.08.07",
"BASEDIR":"/"}
{"NAME":"libiconv2 - GNU iconv library, libiconv.so.2",
"VERSION":"1.14,REV=2011.08.07",
"BASEDIR":"/"}
{"NAME":"libidn11 - GNU IDN library, libidn.so.11",
"VERSION":"1.33,REV=2016.09.05",
"BASEDIR":"/"}

Also, please start using code tags before acquiring too many infractions.....
This User Gave Thanks to vgersh99 For This Post:
# 7  
Old 11-06-2019
Quote:
Originally Posted by balu1234
Hi Rudic,

Thanks for the reply, But when i am trying to executing the script it's repeating each line output three times as well as it's missing double quotes in some places


{"NAME":"QLogic 570x/571x Gigabit Ethernet Driver VERSION":"11.11,REV=2009.11.11 BASEDIR":"/",
"NAME":"QLogic 570x/571x Gigabit Ethernet Driver VERSION":"11.11,REV=2009.11.11 BASEDIR":"/",
"NAME":"QLogic 570x/571x Gigabit Ethernet Driver VERSION":"11.11,REV=2009.11.11 BASEDIR":"/"}

Desired ouput :

{"NAME":"QLogic 570x/571x Gigabit Ethernet Driver", "VERSION":"11.11,REV=2009.11.11", "BASEDIR":"/"}

Very strange. Did you use a one-to-one copy of my proposal? If yes: Looks like line terminators are missing. Can you post each line's NF? On top, pls post input data and a hexdump of (a decent, small, representative subset of) it.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Convert rows into column along with header

Hi, I have a requirement to format the data in a new order. Here is my source format : ppp ***Wed Dec 16 10:32:30 GMT 2015 header1 header2 header3 header4 header5 server1 0.00 0.02 0.07 0.98 server2 0.01 0.00 0.08 0.79 server3 0.05 0.82 0.77 0.86 ... (18 Replies)
Discussion started by: john_prince
18 Replies

2. Shell Programming and Scripting

Convert rows to column and add header

Hi, I need help to convert rows in input file into a table. inputfile 192.98.1 192.98.192.98.17 VVC family Zorro 10 192.98.1 192.98.192.98.17 VVC family Ace 1 192.98.1 192.98.192.98.17 VVC family ... (4 Replies)
Discussion started by: redse171
4 Replies

3. Shell Programming and Scripting

Convert single column into multiple rows

Convert Single column to multiple rows file a.txt contains data like below Server=abc Run=1 Tables=10 Sessions=16 Time=380 Jobs=5 Server=abc Run=2 Tables=15 Sessions=16 Time=400 Jobs=5 Server=abc Run=3 Tables=20 Sessions=16 Time=450 (5 Replies)
Discussion started by: sol_nov
5 Replies

4. Shell Programming and Scripting

Convert Rows into Column

Hi Experts, I have a requirement to convert rows into columns. For e.g. Input File: Output File should be like Appreciate if you could suggest code snippet(may be awk) for above requirement... Thanks in Advance for your help... (3 Replies)
Discussion started by: sai_2507
3 Replies

5. Shell Programming and Scripting

Not able to convert the second column to required format

I have this file 103,7243534512111,NiaC1-02 105,720412845543550,NiaC2-00 105,720439254543351,NiaC200 105,720445724354315,Nia100 105,72044770454398,Nia100 105,720484154334546,Nia616 i want in this format insert into aildump values(103,'7243534512111','NiaC1-02'); I'm able to... (3 Replies)
Discussion started by: nikhil jain
3 Replies

6. Shell Programming and Scripting

awk command to print only selected rows in a particular column specified by column name

Dear All, I have a data file input.csv like below. (Only five column shown here for example.) Data1,StepNo,Data2,Data3,Data4 2,1,3,4,5 3,1,5,6,7 3,2,4,5,6 5,3,5,5,6 From this I want the below output Data1,StepNo,Data2,Data3,Data4 2,1,3,4,5 3,1,5,6,7 where the second column... (4 Replies)
Discussion started by: ks_reddy
4 Replies

7. Shell Programming and Scripting

Convert rows into column groups

Hi I have the text file like this "A" "AA Info" "AA Text" "AAA" "ABC" "ABC Info" "ABC Tech" "AGH" "SYN" "SYMBony" "SYN BEREN" Like about 2000 lines Output would be in Column with groups like following "A" "AA Info", "AA Text" "AAA" "ABC","ABC Info","ABC Tech" (0 Replies)
Discussion started by: selvanraj
0 Replies

8. Shell Programming and Scripting

Convert Column to rows

Hi, I have a file with below contents. Heading1 Heading2 Heading3 Heading4 Value1 Value2 Value3 Value4 The file has only 2 rows and is tab separated The desired output is : Heading1 Value1 Heading2 Value2 Heading3 Value3 Heading4 Value4 CAn you please help? (5 Replies)
Discussion started by: kaponeh
5 Replies

9. Shell Programming and Scripting

shell script required to convert rows to columns

Hi Friends, I have a log file as below siteid = HYD spc = 100 rset = RS_D_M siteid = DEL spc = 200 rset = RS_K_L siteid = DEL2 spc = 210 rset = RS_D_M Now I need a output like column wise as below. siteid SPC rset HYD 100 RS_D_M (2 Replies)
Discussion started by: suresh3566
2 Replies

10. Shell Programming and Scripting

convert rows into column

if u have a data 2 4 6 8 5 4 4 5 6 then result shud be like 2 4 6 7 5 4 4 5 6 (3 Replies)
Discussion started by: cdfd123
3 Replies
Login or Register to Ask a Question