Swapping lines


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Swapping lines
# 1  
Old 12-25-2018
Swapping lines

Hi there,

I have a text that I'm trying to format into something more readable. However, I'm stuck in the last step. I've searched and tried things over the internet with no avail.

OS: Mac

After parsing the original text that I won't put here, I managed to get something like this, but this isn't what I need yet.

Code:
1 [date]
2 [Comments]
3 [X says:]

The problem is that this text is kind of upside down.

Desired output:

Code:
1 [X says:]
2 [Comments]
3 [date]

What I've tried so far is embarrassing ..

awk '/says:/ {NR>2;c=$0;print c,NR-2}' file
This won't work. I've tried many others examples on the internet but they didn't work and I quite didn't understand them either.

An original sample file input would be:

Code:
2018-09-09T14:40:18.161Z
Hello
Pat says:

2018-09-09T14:40:29.813Z
How are you doing?
Pat says:

2018-09-09T14:40:46.808Z
I don't like it today.
Pat says:

2018-09-09T14:45:43.886Z
I wish I could go home.
Pat says:

2018-09-09T14:46:14.643Z
Could you help me?
Pat says:

2018-09-09T15:38:41.817Z
I can't.
Mark says:

The desired output should be something like:
Code:
Pat says:
Hello
2018-09-09T14:40:18.161Z

Pat says:
How are you doing?
2018-09-09T14:40:29.813Z

Pat says:
I don't like it today.
2018-09-09T14:40:46.808Z

Pat says:
I wish I could go home.
2018-09-09T14:45:43.886Z

Pat says:
Could you help me?
2018-09-09T14:46:14.643Z

Mark says:
I can't.
2018-09-09T15:38:41.817Z

This is the log of a conversation that I need to convert into a decent, readable form for others. Anyways, any help is much appreciated.

Last edited by RudiC; 12-25-2018 at 06:36 PM.. Reason: Corrected ICODE tags
# 2  
Old 12-25-2018
Hi, try:

Code:
awk '{print $3,$2,$1}' RS= FS='\n' OFS='\n' ORS='\n\n'  file

# 3  
Old 12-25-2018
it works!.. however I don't know how to make it work for the whole file. After the first three lines it stops.

Code:
awk '{k=1;j=1;for (i=1;i<=NR;++i) k=i+2;j=i+1;print k,j,i}' RS= FS='\n' OFS='\n' ORS='\n\n' file

I tried this unsuccessfully again.
# 4  
Old 12-25-2018
Another attempt with awk.
Untested but well documented.
Code:
awk '
# prepend the current line to buf (ORS is a newline)
{buf=($0 ORS buf)}
# new paragraph? Then store the current line (replacing old content)
p==0 {buf=$0; p=1}
# empty line? Then print buf; new paragraph
NF==0 {print buf; p=0}
# at the END print buf if not yet printed
END {if (p==1) print buf}
' file

# 5  
Old 12-25-2018
Quote:
Originally Posted by Kibou
it works!.. however I don't know how to make it work for the whole file. After the first three lines it stops.

Code:
awk '{k=1;j=1;for (i=1;i<=NR;++i) k=i+2;j=i+1;print k,j,i}' RS= FS='\n' OFS='\n' ORS='\n\n' file

I tried this unsuccessfully again.
Try this modification:
Code:
awk '{i=1;j=i+1;k=i+2;print $k,$j,$i}' RS= FS='\n' OFS='\n' ORS='\n\n' file

# 6  
Old 12-25-2018
@Scrutinizer Unfortunately doesn't work either. I've tried a few modifications but it only prints the first three lines.

@MadeInGermany It works, but for some reason the text is all the way around. The comments at the beginning show at the end.

I don't want to bother you guys that much. I thought this could be easier....
# 7  
Old 12-25-2018
Quote:
Originally Posted by Kibou
@Scrutinizer Unfortunately doesn't work either. I've tried a few modifications but it only prints the first three lines.

@MadeInGermany It works, but for some reason the text is all the way around. The comments at the beginning show at the end.

I don't want to bother you guys that much. I thought this could be easier....
how about:
Code:
awk '{for(i=NF;i;i--) print $i; print RS}' RS= FS='\n' myFile

If not, provide the output of cat -vet myFile using code tags.
Also, what OS are you on?

Last edited by vgersh99; 12-25-2018 at 01:32 PM..
This User Gave Thanks to vgersh99 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Solaris

Swapping

Hi Guys I am using SPARC-T4 (chipid 0, clock 2998 MHz), SunOS 5.10 Generic_150400-38 sun4v. How do I see if the server was doing some swapping like yesterday? I had a java application error with java.lang.OutOfMemoryError, now I want to check if the server was not doing some swapping at... (4 Replies)
Discussion started by: Phuti
4 Replies

2. Shell Programming and Scripting

Swapping the 1st 4 lines only

How can you swap the first 4 line only, the rest will stay the same. thanks #!/bin/sh line=4 awk -v var="$line" 'NR==var { s=$0 getline;s=$0"\n"s getline;print;print s next }1' fileko.tx . desired output: (8 Replies)
Discussion started by: invinzin21
8 Replies

3. Shell Programming and Scripting

Swapping fields

Hallo Team, This is the command that i am running : grep ",Call Forward Not Reachable" *2013* this is the output that i am getting (i did a head -10 but the files can be more than 1000) ... (8 Replies)
Discussion started by: kekanap
8 Replies

4. Shell Programming and Scripting

AWK swapping fields on different lines

Hi All, Sorry if this question has been posted elsewhere, but I'm hoping someone can help me! Bit of an AWK newbie here, but I'm learning (slowly!) I'm trying to cobble a script together that will save me time (is there any other kind?), to swap two fields (one containing whitespace), with... (5 Replies)
Discussion started by: Bravestarr
5 Replies

5. Shell Programming and Scripting

Swapping three lines

I have some text: <date>some_date</date> <text>some_text</text> <name>some_name<name> and I want to transform it to smthng like that: some_name on some_date: some_text I've tried sed: sed 's/<text>\(.*\)<\/text> <name>\(.*\)<\/name>/\2 - \1/' but it says unterminated... (13 Replies)
Discussion started by: dsjkvf
13 Replies

6. Shell Programming and Scripting

swapping lines that match a condition using sed, perl or the like

I'm a bit new to regex and sed/perl stuff, so I would like to ask for some advice. I have tried several variations of scripts I've found on the net, but can't seem to get them to work out just right. I have a file with the following information... # Host 1 host 45583 { filename... (4 Replies)
Discussion started by: TheBigAmbulance
4 Replies

7. Shell Programming and Scripting

Swapping lines beginning with certain words using sed/awk

I have a large file which reads like this: fixed-address 192.168.6.6 { hardware ethernet 00:22:64:5b:db:b1; host X; } fixed-address 192.168.6.7 { hardware ethernet 00:22:64:5b:db:b3; host Y; } fixed-address 192.168.6.8 { hardware ethernet 00:22:64:5b:db:b4; host A; }... (4 Replies)
Discussion started by: ksk
4 Replies

8. Shell Programming and Scripting

Swapping or switching 2 lines using sed

I made a script that can swap info on two lines using a combination of awk and sed, but was hoping to consolidate the script to make it run faster. If found this script, but can't seem to get it to work in a bash shell. I keep getting the error "Too many {'s". Any help here would be appreciated:... (38 Replies)
Discussion started by: LaTortuga
38 Replies

9. SuSE

Swapping

Hello! Why does my SuSE GNU/Linux machine swap? I have a Gig of ram, currently 14MBs of free RAM, 724MB - buffers and caches... That is 685MB of cached RAM, then kernel really should'nt have to swap, It should release cached memory in my thinkin... It has only swaped 3MB's but still,... (3 Replies)
Discussion started by: Esaia
3 Replies

10. UNIX for Dummies Questions & Answers

Swapping questions

How can you tell how much a Solaris box is swapping? At what point do page in and page out become a problem? Here is a vmstat output. > vmstat procs memory page disk faults cpu r b w swap free re mf pi po fr de sr m0 m1 m2 m3 in sy cs us sy id... (1 Reply)
Discussion started by: 98_1LE
1 Replies
Login or Register to Ask a Question