Sponsored Content
Top Forums Shell Programming and Scripting Bash script to extract paragraph with globs in it Post 302992548 by drysdalk on Monday 27th of February 2017 09:30:54 AM
Old 02-27-2017
Hi,

OK, thanks for the detail. This would seem to imply that your Linux system doesn't have /bin/tempfile installed on it. It may be worth checking to see if it's in /usr/bin/tempfile instead, but failing that change the line to something like this:

tmp=/tmp/script.tmp

or any other filename that you are sure it is safe for you to use.

An alternative version of the script that purely checks for the presence of "BEGIN MESSAGE" or "END MESSAGE" anywhere on a line follows.

Note that this isn't strictly speaking 100% safe or reliable, since if for any reason any other line happened to contain either of these strings as part of its text this would trigger the checks in question, and cause that particular block (at a minimum) to get mangled.

It's always a good idea to absolutely strictly define strings like this if you can, since they are fundamental to how parsing a file can safely be done. But if the number of asterisks is variable then you may have to go with the less-strict version below.

Code:
#!/bin/bash

input=example.txt
tmp=`/bin/tempfile`

while read -r line
do
        if echo "$line" | /bin/grep "BEGIN MESSAGE" >/dev/null 2>/dev/null
        then
                echo "$line" > "$tmp"
        elif echo "$line" | /bin/grep "END MESSAGE" >/dev/null 2>/dev/null
        then
                echo "$line" >> "$tmp"

                if /bin/grep ^Original\ presentment\ Not\ Found\ \!$ "$tmp" >/dev/null 2>/dev/null
                then
                        /bin/cat "$tmp"
                        echo
                fi
        else
                echo "$line" >> "$tmp"
        fi
done < "$input"

---------- Post updated at 02:30 PM ---------- Previous update was at 02:20 PM ----------

Hi,

One last version, this time avoiding the use of grep (which may make things run a little faster if you have a great deal of data to get through):

Code:
#!/bin/bash

input=example.txt
tmp=`/bin/tempfile`

while read -r line
do
        case "$line" in
                *BEGIN\ MESSAGE*)
                        echo "$line" > "$tmp"
                        ;;
                *END\ MESSAGE*)
                        echo "$line" >> "$tmp"

                        if /bin/grep ^Original\ presentment\ Not\ Found\ \!$ "$tmp" >/dev/null 2>/dev/null
                        then
                                /bin/cat "$tmp"
                                echo
                        fi
                        ;;
                *)
                        echo "$line" >> "$tmp"
                        ;;
        esac
done < "$input"

Again, the same caveats apply as outlined previously: if a line for any reason contains "BEGIN MESSAGE" or "END MESSAGE" as part of its own text and isn't itself a block marker, this would cause problems. So this is only safe if you're 100% sure that will never happen in your input.
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

*.pm globs without quoting, *.pl doesn't.

Can someone explain the following? I can use find on *.pm without quotes, but find on *.pl makes on error, I need quotes for the second version. What's up with that? $find -name *.pm ./tieProxyStatus/Status.pm $find -name *.pl find: paths must precede expression Usage: find $find... (2 Replies)
Discussion started by: tphyahoo
2 Replies

2. Shell Programming and Scripting

script for a 3 line paragraph

i would like to ask how to make a script that in evry 3 lines of my paragraph(below) it would appear like this: $ cat myparagraph this is line 1 this is line 2 this is line3 this is line 4 this is 5 this 6 this is 7 this 8 ==================================================== $ cat... (2 Replies)
Discussion started by: invinzin21
2 Replies

3. Shell Programming and Scripting

how to extract paragraphs from file in BASH script followed by prefix ! , !! and !!!

I]hi all i am in confusion since last 2 days :( i posted thraed yesterday and some friends did help but still i couldnt get solution to my problem let it be very clear i have a long log file of alkatel switch and i have to seperate the minor major and critical alarms shown by ! , !! and !!!... (6 Replies)
Discussion started by: nabmufti
6 Replies

4. Linux

Extract a paragraph

Hi , Unix.com has been life saver for me I admit :) I am trying to extract a paragraph based on matching pattern "CREATE TABLE " from a ddl file . The paragraphs are seperated by blank line . Input file is #cat zip.20080604.sql1 CONNECT TO TST103 SET SESSION_USER OPSDM002 ... (2 Replies)
Discussion started by: capri_drm
2 Replies

5. Shell Programming and Scripting

script to list out the output in one paragraph

Hi All, I want to run 5 `ps -ef | grep ` cmds in one script and i want the script to give me return code 0 if everything is OK. If it notices one of the processes is not there, it will prompt me the process name and advice me to check it. I've wrote a script that separates the output but I want... (2 Replies)
Discussion started by: fara_aris
2 Replies

6. UNIX for Dummies Questions & Answers

Bash script to extract spf records

Hello I am trying to generate a script to run on worldwide firewalls. I need the spf block for large sites like google, etc so I can essentially whitelist google sites for users. (Google here is just an example...) Right now I am just testing Bash oneliners to see how I can isolate the... (1 Reply)
Discussion started by: mbubb
1 Replies

7. Shell Programming and Scripting

How to extract multiple line in a paragraph? Please help.

Hi all, The following lines are taken from a long paragraph: Labels of output orbitals: RY* RY* RY* RY* RY* RY* 1\1\GINC-COMPUTE-1-3\SP\UB3LYP\6-31G\C2H5Cr1O1(1+,5)\LIUZHEN\19-Jan-20 10\0\\# ub3lyp/6-31G pop=(nbo,savenbo) gfprint\\E101GECP\\1,5\O,0,-1.7 ... (1 Reply)
Discussion started by: liuzhencc
1 Replies

8. Shell Programming and Scripting

how to write bash script that will automatically extract zip file

i'm trying to write a bash script that that will automatically extract zip files after the download. i writed this script #!/bin/bash wget -c https://github.com/RonGokhle/kernel-downloader/zipball/master CURRENDIR=/home/kernel-downloader cd $CURRENDIR rm $CURRENDIR/zipfiles 2>/dev/null ... (2 Replies)
Discussion started by: ron gokhle
2 Replies

9. UNIX for Dummies Questions & Answers

Extract paragraph that contains a value x<-30

I am using OSX. I have a multi-mol2 file (text file with coordinates and info for several molecules). An example of two molecules in the file is given below for molecule1 and molecule 2. The total file contains >50,000 molecules. I would like to extract out and write to another file only the... (2 Replies)
Discussion started by: Egy
2 Replies

10. Shell Programming and Scripting

How to extract a paragraph containing a given string?

Hello: Have a very annoying problem: Need to extract paragraphs with a specific string in them from a very large file with a repeating record separator. Example data: a file called test.out CREATE VIEW view1 AS something FROM table1 ,table2 as A, table3 (something FROM table4) FROM... (15 Replies)
Discussion started by: delphys
15 Replies
All times are GMT -4. The time now is 12:59 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy