Move a line containg "char" above line containing "xchar"


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Move a line containg "char" above line containing "xchar"
# 1  
Old 03-18-2015
Move a line containg "char" above line containing "xchar"

Okay, so I have a rather large text file and will have to process many more and this will save me hours of work.
I'm not very good at scripting, so bear with me please.

Working on Linux RHEL

I've been able to filter and edit and clean up using sed, but I have a problem with moving lines.

I have a file containing entries like this:
Code:
<tr>
<td>Manufacturer</td>
<td>Type</td>
<td>Model</td>
<td>OID</td>
<td>IF-Usage</td>
<td>Environment</td>
<td>CPU/MEM</td>
</tr>
<tr>
<td>[[Cisco]]</td>
<td>.1.3.6.1.4.1.9.1.1249 </td>
TYPE            = Router
VENDOR          = Cisco
MODEL           = 892F
CERTIFICATION   = CERTIFIED
CONT = Cisco-Router-Entity
NEIGHBOR = Cisco-Cdp
HEALTH = Cisco-Router

For each occurence in the file (literally thousands), I need to move the line "TYPE = Router"
Below the line "<td>[[Cisco]]</td>"

After that I'll need to move other variables around and convert everything to html tables, but that I can do already.
Because I will reuse the command for the other variables in the text, it would be better to do it using matching char rather than just counting lines.

Any ideas?

Last edited by vgersh99; 03-18-2015 at 04:54 PM.. Reason: code tags, please!
# 2  
Old 03-18-2015
Quote:
Originally Posted by rex007can
Okay, so I have a rather large text file and will have to process many more and this will save me hours of work.
I'm not very good at scripting, so bear with me please.

Working on Linux RHEL

I've been able to filter and edit and clean up using sed, but I have a problem with moving lines.

I have a file containing entries like this:
<tr>
<td>Manufacturer</td>
<td>Type</td>
<td>Model</td>
<td>OID</td>
<td>IF-Usage</td>
<td>Environment</td>
<td>CPU/MEM</td>
</tr>
<tr>
<td>[[Cisco]]</td>
<td>.1.3.6.1.4.1.9.1.1249 </td>
TYPE = Router
VENDOR = Cisco
MODEL = 892F
CERTIFICATION = CERTIFIED
CONT = Cisco-Router-Entity
NEIGHBOR = Cisco-Cdp
HEALTH = Cisco-Router

For each occurence in the file (literally thousands), I need to move the line "TYPE = Router"
Below the line "<td>[[Cisco]]</td>"

After that I'll need to move other variables around and convert everything to html tables, but that I can do already.
Because I will reuse the command for the other variables in the text, it would be better to do it using matching char rather than just counting lines.

Any ideas?
Code:
awk '/'<td>[[Cisco]]</td>'/{print;print "TYPE            = Router";next}1' then try removing 'TYPE            = Router' pttern


Last edited by zozoo; 03-18-2015 at 05:20 PM..
# 3  
Old 03-18-2015
that would allow me to find each occurrence of the line, but it won't move it where I want.
# 4  
Old 03-18-2015
awk -f rex.awk myFile, where rex.awk is:

Code:
BEGIN {
  pat2move="TYPE            = Router"
  patBelow="[[Cisco]]"
}
$0 ~ pat2move {next}
$0 ~ patBelow { $0 = $0 ORS pat2move}
1

Disclaimer: with some basic assumptions - YMMV

Last edited by vgersh99; 03-18-2015 at 05:19 PM.. Reason: more succinct
This User Gave Thanks to vgersh99 For This Post:
# 5  
Old 03-18-2015
This gives an error at "="
# 6  
Old 03-18-2015
Quote:
Originally Posted by rex007can
This gives an error at "="
My crystal ball is being repaired...
Please post exactly what you tried, sample file and the exact error message.
# 7  
Old 03-18-2015
Code:
awk -f rex.awk fileA.txt     
awk: rex.awk:2: 2move="TYPE=Router"
awk: rex.awk:2:      ^ syntax error

Moderator's Comments:
Mod Comment When you use CODE tags (as required for sample input, output, and code segments by forum rules), your diagnostic output doesn't need leading spaces and underscores to make the awk syntax error point to the correct character.

Last edited by Don Cragun; 03-18-2015 at 09:05 PM.. Reason: Add CODE tags; remove spaces and underscores compensating for proportional font.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

2. Shell Programming and Scripting

Failure: if grep "$Var" "$line" inside while read line loop

Hi everybody, I am new at Unix/Bourne shell scripting and with my youngest experiences, I will not become very old with it :o My code: #!/bin/sh set -e set -u export IFS= optl="Optl" LOCSTORCLI="/opt/lsi/storcli/storcli" ($LOCSTORCLI /c0 /vall show | grep RAID | cut -d " "... (5 Replies)
Discussion started by: Subsonic66
5 Replies

3. Shell Programming and Scripting

Delete all log files older than 10 day and whose first string of the first line is "MSH" or "<?xml"

Dear Ladies & Gents, I have a requirement to delete all the log files in /var/log/test directory that are older than 10 days and their first line begin with "MSH" or "<?xml" or "FHS". I've put together the following BASH script, but it's erroring out: for filename in $(find /var/log/test... (2 Replies)
Discussion started by: Hiroshi
2 Replies

4. Shell Programming and Scripting

Find "*.c" and "Makefile" and then delete them with one line

find "*.c" and "Makefile" and then delete them with one line (3 Replies)
Discussion started by: yanglei_fage
3 Replies

5. Shell Programming and Scripting

Find lines with "A" then change "E" to "X" same line

I have a bunch of random character lines like ABCEDFG. I want to find all lines with "A" and then change any "E" to "X" in the same line. ALL lines with "A" will have an "X" somewhere in it. I have tried sed awk and vi editor. I get close, not quite there. I know someone has already solved this... (10 Replies)
Discussion started by: nightwatchrenba
10 Replies

6. Shell Programming and Scripting

AWK for multiple line records RS="^" FS="#"

I have to pull multiple line records with ^ as the record separator(RS)... # should be my field separator (FS)... Sample record is: ^-60#ORA-00060: deadlock detected while waiting for resource ORA-00001: unique constraint (SARADM.TCKNUM_PK) violated#PROC:AVAILABLE_FOR_GETNXTTIC#02/27/2012... (7 Replies)
Discussion started by: Vidhyaprakash
7 Replies

7. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

8. Shell Programming and Scripting

How to remove "New line characters" and "spaces" at a time

Dear friends, following is the output of a script from which I want to remove spaces and new-line characters. Example:- Line1 abcdefghijklmnopqrstuvwxyz Line2 mnopqrstuvwxyzabcdefghijkl Line3 opqrstuvwxyzabcdefdefg Here in above example, at every starting line there is a “tab” &... (4 Replies)
Discussion started by: anushree.a
4 Replies

9. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies
Login or Register to Ask a Question