How to change file section into each line?


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to change file section into each line?
# 1  
How to change file section into each line?

Hi Gurus,
I have below file which has different sections, need to move the sections to beginning of the each record.
original file
Code:
[abc_xxxx_yyyy]
aaa
bbb
ccc
[abc_mmmm_nnnn]
ddd
eee
fff

output file.
Code:
[abc_xxxx_yyyy] aaa
[abc_xxxx_yyyy] bbb
[abc_xxxx_yyyy] ccc
[abc_mmmm_nnnn] ddd
[abc_mmmm_nnnn] eee
[abc_mmmm_nnnn] fff

thanks in advance
# 2  
Hello green_k,

On forums, we do encourage users to add their efforts which they have put in order to solve their own problems in their questions. So kindly do so and let us know, since we all are here to learn, cheers.


Thanks,
R. Singh
# 3  
Quote:
Originally Posted by RavinderSingh13
Hello green_k,

On forums, we do encourage users to add their efforts which they have put in order to solve their own problems in their questions. So kindly do so and let us know, since we all are here to learn, cheers.


Thanks,
R. Singh
thanks R.Singh.
I tried to use awk to archive this, but it doesn't work as I have very limited knowledge.
below is my code. my thought is: first read section into ARRAY, then read next line; then print array value and the line together.
my os is: SunOS 5.10 Generic_150400-64 sun4v sparc sun4v

Code:
awk '/\[abc*/{a[i]=$0; i++; next}{print a[i]  $0}'


Last edited by green_k; 12-05-2019 at 12:04 AM..
# 4  
Hello green_k,

Could you please try following.

Code:
awk '/^\[/{val=$0;next} {print val,$0}'  Input_file

On Sun o.s use nawk in place of awk.

Thanks,
R. Singh

Last edited by RavinderSingh13; 12-05-2019 at 01:05 AM..
This User Gave Thanks to RavinderSingh13 For This Post:
# 5  
Quote:
Originally Posted by RavinderSingh13
Hello green_k,

Could you please try following.

Code:
awk '/^\[/{val=$0;next} {print val,$0}'  Input_file

On Sun o.s use nawk in place of awk.

Thanks,
R. Singh
Thanks R.Singh. it works as expected.
one more question, I want to count total number of lines and put total number at end of the record. I don't know how to hold all the lines and print at end of each section. I tried below codes, no luck .
what I thought is to use array line[] to hold each line, at end, print the line and number. but it doesn't work like that.

please share you suggestion.

Code:
awk '/^\[/{val=$0;next} {if(!/^$/) {i++; print val,$0, i}}'

Code:
awk '/^\[/{val=$0;next} {if(!/^$/) i++; line[i]=$0}END{if(a in line) print val,line[i], i}'

Code:
awk '/^\[/{val=$0;next} {if(!/^$/) i++; line[i]=$0}END{if(a in line) print val,a, i}'

Code:
[abc_xxxx_yyyy] aaa 3
[abc_xxxx_yyyy] bbb 3
[abc_xxxx_yyyy] ccc 3
[abc_mmmm_nnnn] ddd 3
[abc_mmmm_nnnn] eee 3
[abc_mmmm_nnnn] fff 3

# 6  
Hello green_k,

Could you please try following.

Code:
awk '
/^\[/{
  if(count){
    for(i=1;i<=count;i++){
      print val,a[i],count
    }
  }
  val=$0
  count=""
  next
}
  {
    a[++count]=$0
  }
END{
  if(count){
    for(i=1;i<=count;i++){
      print val,a[i],count
    }
  }
}'    Input_file

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 7  
Quote:
Originally Posted by RavinderSingh13
Hello green_k,

Could you please try following.

Code:
awk '
/^\[/{
  if(count){
    for(i=1;i<=count;i++){
      print val,a[i],count
    }
  }
  val=$0
  count=""
  next
}
  {
    a[++count]=$0
  }
END{
  if(count){
    for(i=1;i<=count;i++){
      print val,a[i],count
    }
  }
}'    Input_file

Thanks,
R. Singh
thanks R.Singh. The code works as expected.

SmilieSmilieSmilie
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #205
Difficulty: Easy
Routing Information Protocol (RIP) runs over Transmission Control Protocol (TCP).
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Grep or print each section of a file on one line with a separator

I can obtain information from itdt inventory command however it display as below, I'd like to print each entity on one line but seperated by : the file is something like and each section ends with Volume Tag Drive Address 256 Drive State ................... Normal ASC/ASCQ... (3 Replies)
Discussion started by: gefa
3 Replies

2. Shell Programming and Scripting

Print the first n line in each section

Hi, i have a file like this: ... 11111111 22222222 33333333 # 4444444 5555555 6666666 7777777 # ... i want just print the 2 first line between each section (each section is separated with "#"). so desired output would be like this: ... 11111111 22222222 (3 Replies)
Discussion started by: saeed.soltani
3 Replies

3. Shell Programming and Scripting

Prepend first line of section to each line until the next section header

I have searched in a variety of ways in a variety of places but have come up empty. I would like to prepend a portion of a section header to each following line until the next section header. I have been using sed for most things up until now but I'd go for a solution in just about anything--... (7 Replies)
Discussion started by: pagrus
7 Replies

4. Shell Programming and Scripting

Parse configuration file & add line in particular section

Greetings, I recently built a replicated DRBD, Heartbeat, & iSCSI Target Initiator storage server on Ubuntu 10.04 to offer shared storage to server Vmware ESX and Microsoft Clusters. Everything works flawlessly, however I wanted to make a script to create, remove, grow volumes to offer ESX... (6 Replies)
Discussion started by: Aeudian
6 Replies

5. Shell Programming and Scripting

Extract section of file based on word in section

I have a list of Servers in no particular order as follows: virtualMachines="IIBSBS IIBVICDMS01 IIBVICMA01"And I am generating some output from a pre-existing script that gives me the following (this is a sample output selection). 9/17/2010 8:00:05 PM: Normal backup using VDRBACKUPS... (2 Replies)
Discussion started by: jelloir
2 Replies

6. Shell Programming and Scripting

Duplicate Line Report per Section

I've been working on a script (/bin/sh) in which I have requested and received help here (in which I am very grateful for!). The client has modified their requirements (a tad), so without messing up the script to much, I come once again for assistance. Here are the file.dat contents: ABC1... (4 Replies)
Discussion started by: petersf
4 Replies

7. Shell Programming and Scripting

how to retreive certain section of the line

Hi I am using "grep" command to get certain pattern out of the file: PNUM=34 $ grep -w "#${PNUM}" myfile #34 * 2297 * 410 * 964 * * 4352 $ Is there a way to retrieve the section of the above output without #34 so the output would look like this:... (3 Replies)
Discussion started by: aoussenko
3 Replies

8. Shell Programming and Scripting

Remove certain section from the line

A typical line looks like this... ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=129 COMMENT='Compiled E-Mails';I want to remove DEFAULT CHARSET= and COLLATE= after resetting AUTO_INCREMENT=0 I do not want to change the engine and comment. (7 Replies)
Discussion started by: shantanuo
7 Replies

9. Shell Programming and Scripting

Script to change file contents line by line

Hi, Iím struggling to write a script to do the following, -will go through each line in the file -in a specific character positions, changes the value to a new value -These character positions are fixed througout the file ----------------------- e.g.: file1.sh will have the following 3... (4 Replies)
Discussion started by: vini99
4 Replies

10. UNIX for Dummies Questions & Answers

help find a section line of a file

hi, I have a 20 line file. I need a command which will brinf back a specific line based upon the line number I enter. e.g. the file looks like this and is called file1 jim is a man john is a woman james is a man wendy is a woman lesley is a woman i want a command that will... (4 Replies)
Discussion started by: sureshy
4 Replies