Sponsored Content
Top Forums Shell Programming and Scripting Omitting sections of file that contain word Post 302708947 by SkySmart on Tuesday 2nd of October 2012 12:15:47 PM
Old 10-02-2012
Omitting sections of file that contain word

I have a configuration file that contains hundreds of these chunks. Each "chunk" is the section that begins with "define service {" and ends with "}".


Code:
define service {
        check_command                   check_proc!java
        hostgroup_name
        service_description             Check Java
        use                             process-service
}

define service {
        check_command                   check_proc!apache
        hostgroup_name
        service_description             Check Apache
        use                             process-service
}

define service {
        check_command                   check_proc!syslog
        hostgroup_name
        host_name                        sky-01.smart.net,sky-02.smart.net
        service_description             Check Syslog
        use                             process-service
}

Now, let's assume the above configuration is from a file called process.cfg.

Now, what I wish to do is to "cat" the process.cfg file, and then omit every chunk in that file that has nothing set for the "hostgroup_name". Then redirect results to a new file. this new file which will be void of the chunks that do not have anything set for hostgroup_name.

There is a challenge to this.

If you look at each chunk above, you will see that all of them have nothing set for "hostgroup_name". So if i cat the process.cfg and I run an awk code against it, what would be left will be, most likely, the last chunk.

If you look at the very last chunk, you see that, there are hosts set up for it. the "host_name" section has hosts defined. so, in this case, i dont want this chunk to be omitted. i would ever like to have it ommitted if the host_name field exist, AND is also empty as well.

os: linux
shell: bash

sample of a code that can be modified to do the above:
Code:
cat process.cfg | awk 'NR==FNR {a=(a?a"|":"")$0; next}; {gsub(a,""); gsub(" ,+"," "); gsub(",+$",""); gsub(",+",",")} !/hostgroup_name[ \t\n]*use/ {print $0 RS}' /tmp/listofhostgroups.txt RS="}\n" > newfile

the "/tmp/listofhosts.txt" may not be necessary. but i dont know how to make this code woork.

any ideas?
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

omitting lines from file A that are in file B

I've got file A with (say) 1M lines in it ... ascii text, space delimited ... I've got file B with (say) 10M lines in it ... same structure. I want to remove any lines from A that appear (identically) in B and print the remaining (say) 900K lines. (And I want to do it in zero time of... (14 Replies)
Discussion started by: gneen
14 Replies

2. UNIX for Advanced & Expert Users

extract multiple sections of a file

I have a file that I need to parse multiple sections from the file. The file contains multiple lines that start with ST (Abunch of data) Then the file contains multiple lines that start with SE (Abunch of data) SE*30*0001 ... (1 Reply)
Discussion started by: rgentis
1 Replies

3. Shell Programming and Scripting

extract multiple sections of file

I have a file that I need to parse multiple sections from the file. The file contains multiple lines that start with ST (Abunch of data) Then the file contains multiple lines that start with SE (Abunch of data) SE*30*0001 ST*810*0002 I need all of the lines between and including these.... (6 Replies)
Discussion started by: rgentis
6 Replies

4. Shell Programming and Scripting

Best way to remove sections of text from a file

Greetings! I found this fourm via a google search on "sed expressions". I have a file that contains notices and they are all the same length in lines. For example the file would contains 15 notices, each being 26 lines each. I need some way to eliminate notices that contain a "S" in a particular... (8 Replies)
Discussion started by: cals64
8 Replies

5. Shell Programming and Scripting

Parsing file, yaml file? Extracting specific sections

Here is a data file, which I believe is in YAML. I am trying to retrieve just the 'addon_domains" section, which doesnt seem to be as easy as I had originally thought. Any help on this would be greatly appreciated!! I have been trying to do this in awk and mostly bash scripting instead of perl... (3 Replies)
Discussion started by: Rhije
3 Replies

6. Shell Programming and Scripting

Remove sections of a xml file with sed

I've been trying to remove some lines of a xml file that looks like this: <parent> <child>name1</child> <lots_of_other tags></lots_of_other_tags> </parent> <parent> <child>name2</child> <lots_of_other tags></lots_of_other_tags> </parent> <parent> <child>name3</child> ... (5 Replies)
Discussion started by: viniciusandre
5 Replies

7. Shell Programming and Scripting

Modify sections of the line in a file

Hello.. I have a line in a file which I have to edit: the line looks like: <!]> Sometimes, the section of the line can have only one entry for cn, or maybe more than 2 like below: <!]> I have a variable which has the following value: CN="(cn=MNO)(cn=XYZ)" I need to replace the part... (4 Replies)
Discussion started by: chiru_h
4 Replies

8. Shell Programming and Scripting

How to edit file sections that cross multiple lines?

Hello, I'm wondering where I could go to learn how to edit file sections that cross multiple lines. I'm wanting to write scripts that will add Gnome menu entries for all users on a system for scripts I write, etc. I can search an replace simple examples with sed, but this seems more complex. ... (8 Replies)
Discussion started by: Narnie
8 Replies

9. Programming

extract different sections of a file

Hi All, I have a file with the data 10;20;30;40;50;60;70;80;123;145;156;345. the output i want is the first fourth sixth elements and everything from there on. How do i achieve this. (1 Reply)
Discussion started by: raghu_shekar
1 Replies

10. Shell Programming and Scripting

awk removing sections of a file

I have a file that looks liek this (see below). can somebody provide me with and awk or sed command that can take a piece of the file starting from the time to the blank line and put in into another file. For example: How would I get the data from 10:56:11 to the blank line. Two things: ... (5 Replies)
Discussion started by: BeefStu
5 Replies
radiusd.conf(5) 					   FreeRADIUS configuration file					   radiusd.conf(5)

NAME
radiusd.conf - configuration file for the FreeRADIUS server DESCRIPTION
The radiusd.conf file resides in the radius database directory, by default /etc/raddb. It defines the global configuration for the FreeRA- DIUS RADIUS server. CONTENTS
There are a large number of configuration parameters for the server. Most are documented in the file itself as comments. This page docu- ments only the format of the file. Please read the radiusd.conf file itself for more information. The configuration file parser is independent of the server configuration. This means that you can put almost anything into the configura- tion file. So long as it is properly formatted, the server will start. When the server parses the configuration file, it looks only for those configurations it understands. Extra configuration items are ignored. This "feature" can be (ab)used in certain interesting ways. FILE FORMAT
The file format is line-based, like many other Unix configuration files. Each entry in the file must be placed on a line by itself, although continuations are supported. The file consists of configuration items (variable = value pairs), sections, and comments. Variables Variables can be set via: name = value Single and double-quoted strings are permitted: string1 = "hello world" string2 = 'hello mom' Sections A section begins with a section name, followed on the same line by an open bracket '{'. Section may contain other sections, com- ments, or variables. Sections may be nested to any depth, limited only by available memory. A section ends with a close bracket '}', on a line by itself. section { ... } Sections can sometimes have a second name following the first one. The situations where this is legal depend on the context. See the examples and comments in the radiusd.conf file for more information. section foo { ... } Comments Any line beginning with a (#) is deemed to be a comment, and is ignored. Comments can appear after a variable or section defini- tions. # comment foo = bar # set variable 'foo' to value 'bar' section { # start of section ... } # end of section Continuations Long lines can be broken up via continuations, using '' as the last character of the line. For example, the following entry: foo = "blah blah blah" will set the value of the variable "foo" to "blah blah blah". Any CR or LF is not turned into a space, but all other whitespace is preserved in the final value. REFERENCES
The value of a variable can reference another variable. These references are evaluated when the configuration file is loaded, which means that there is no run-time cost associated with them. This feature is most useful for turning long, repeated pieces of text into short ones. Variables are referenced by ${variable_name}, as in the following examples. foo = bar # set variable 'foo' to value 'bar' who = ${foo} # sets variable 'who' to value of variable 'foo' my = "${foo} a" # sets variable 'my' to "bar a" If the variable exists in a section or subsection, it can be referenced as ${section.subsection.variable}. Forward references are not allowed. Relative references are allowed, by pre-pending the name with one or more period. blogs = ${.foo} Will set variable blogs to the value of variable foo, from the current section. blogs = ${..foo} Will set variable blogs to the value of variable foo, from the section which contains the current section. blogs = ${modules.detail.filename} Will set variable blogs to the value of variable filename, of the detail module, which is in the modules section of the configuration file. Properties of anonymous parent sections may also be referenced, currently name and instance are supported. modules { example foo { file = ${.:name} } } Will set variable file to the name of the containing section (example). modules { example foo { file = ${.:instance} } } Will set variable file to the instance name of the containing section (foo). modules { example foo { file = ${..:name} } } Will set variable file to the name of the parent of the containing section (modules). FILES
/etc/raddb/radiusd.conf SEE ALSO
radiusd(8) unlang(5) AUTHOR
Alan DeKok <aland@freeradius.org> 28 Jun 2013 radiusd.conf(5)
All times are GMT -4. The time now is 01:02 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy