Sponsored Content
Top Forums UNIX for Dummies Questions & Answers multiple text edits inone pass Post 302627491 by gary_w on Friday 20th of April 2012 04:06:52 PM
Old 04-20-2012
Here's a stab at it. I'm sure some of the awk experts will come up with a slick way to do it in one line, but this works, is easy to follow and sets a framework for possible future line by line processing requirements. It assumes the titles will be taken in order as you describe. You could load the titles in an array too. Not sure about the performance trade-off between calling sed multiple times vs using an array.
Code:
$ cat x
#!/bin/ksh

## Define variables.
typeset -i ctr=1                              # Integer counter
typeset -r TEXT_TO_MATCH="Untitled Placemark" # Constants
typeset -r TITLE_FILE="file_2"
typeset -r SOURCE_FILE="file_1"

##
## Process SOURCE_FILE.
##
while read line
do
  if [[ "$line" != "$TEXT_TO_MATCH" ]]; then
    print $line
  else
    # Print the matching line from the TITLE_FILE instead.
    sed "${ctr},${ctr}!d" $TITLE_FILE
    (( ctr=ctr+1 ))
  fi

done < $SOURCE_FILE

exit 0

$ x
bunch of text
Title_001
bunch of text
bunch of text
Title_002
bunch of text
bunch of text
Title_003
bunch of text
$

For the sake of argument, here's a version that gets the titles from an array:
Code:
$ cat x1
#!/bin/ksh

## Define variables.
set -A title_array                            # Array to hold titles
typeset -i ctr=0                              # Integer counter
typeset -r TEXT_TO_MATCH="Untitled Placemark" # Constants
typeset -r TITLE_FILE="file_2"
typeset -r SOURCE_FILE="file_1"

##
## Load the title array from $TITLE_FILE.
##
while read title_text
do
  title_array[${ctr}]=${title_text}
  (( ctr=ctr+1 ))
done < $TITLE_FILE

## Reset the counter.
ctr=0

##
## Process SOURCE_FILE.
##
while read line
do
  if [[ "$line" != "$TEXT_TO_MATCH" ]]; then
    print $line
  else
    # Print the matching line from the title_array instead.
    print ${title_array[$ctr]}
    (( ctr=ctr+1 ))
  fi

done < $SOURCE_FILE


exit 0
$ x1
bunch of text
Title_001
bunch of text
bunch of text
Title_002
bunch of text
bunch of text
Title_003
bunch of text
$

FYI - I ran both several times using the time command, and the sed version runs a smidge slower. Granted, the test files are tiny and your performance may vary!
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Pass multiple variables to SQL script

I am trying to close of multiple users in an Oracle database. Each users has records in multiple tables what I need to do is use a script that call each SQL seperately passing either CLI arguments or gathered arguments from the users during run time. ## Accept variable(s) from the command line... (1 Reply)
Discussion started by: jagannatha
1 Replies

2. Shell Programming and Scripting

Need help with scripting mass file edits..

Hello, I am wanting to know a way to shell (ksh)script-edit a file by having a script that searches for a specific string, and then input lines of text in the file after that specific string. Please help, as I will be up all night if I can't figure this out. (16 Replies)
Discussion started by: LinuxRacr
16 Replies

3. Shell Programming and Scripting

Multiple edits to a bunch of html files

I'm trying to upgrade a whole bunch of pages on my site to a new design. I thought one way of doing it would be to enclose the content in special comment tags and then use some form of script to wrap the new html around it. Like this: <!-- content start --> <h1>Blah blah blah</h1> yada yada... (9 Replies)
Discussion started by: dheian
9 Replies

4. Shell Programming and Scripting

How do we pass multiple arguments into awk

How do we pass multiple arguments into awk : name=john age=12 now i have to pass both age and name into awk.. how to do it? like : awk -v var=... (4 Replies)
Discussion started by: abhinav192
4 Replies

5. Shell Programming and Scripting

Shell script to pass multiple stdin to prorgam?

Running on AIX 5.3L. I have a program "foo" written in Fortran that requires 3 levels of inputs from stdin (command prompt). > foo Enter Input 1: a Enter Input 2: b Enter Input 3: c running foo success! > How do I get a shell script to run this automatically? > echo "a" | foo... (2 Replies)
Discussion started by: discoganya
2 Replies

6. Homework & Coursework Questions

K&R C code edits

1. The problem statement, all variables and given/known data: 2. Relevant commands, code, scripts, algorithms: We have to do this using 'unix tools' and not use the script as if it were C. Meaning, he wants more uses of grep, sed, awk, cut, etc... than he does while, for, do's and done's.... (23 Replies)
Discussion started by: theexitwound
23 Replies

7. Shell Programming and Scripting

How to automatically pass 'multiple' user inputs

Hi Everyone, 1) I really cannot figure out how to pass multiple user inputs in a script. really need your help re this. below is the script. ----------- #!/bin/sh # script name: ask.sh echo "Enter name: \c" read NAME echo "Your name is $NAME\n" echo "Enter age: \c" read AGE echo... (5 Replies)
Discussion started by: mcoblefias
5 Replies

8. UNIX for Dummies Questions & Answers

To pass multiple arguments from file in to an sql query

Hi all , I want to pass contents from a file say f1 as arguments to a sql query which has In statement using a script example select * from table_1 where login in ( `cat f1`) ; will this work or is there any other way to do it. (1 Reply)
Discussion started by: zozoo
1 Replies

9. Shell Programming and Scripting

Is is possible to pass multiple entries in PS3 select ?

PS3="Enter corresponding number and hit enter:" select DIR in `cat mylist` QUIT do if then echo "INVALID INPUT" else if ; then my commands ..... else break fi fi REPLY='' done The above will return something like below : Select from the list of... (4 Replies)
Discussion started by: ningy
4 Replies

10. UNIX for Advanced & Expert Users

Pass Multiple Commands and Open Multiple Xterms via PSS

Hello, I'm attempting to open multiple xterms and run a command as an SAP user via sudo using PSSH. So far, I'm able to run PSSH to a file of servers with no check for keys, open every xterm in to the servers in the file list, and SUDO to the SAP(ADM) user, but it won't do anything else... (11 Replies)
Discussion started by: icemanj
11 Replies
PMC(9)							   BSD Kernel Developer's Manual						    PMC(9)

NAME
pmc, pmc_get_num_counters, pmc_get_counter_type, pmc_save_context, pmc_restore_context, pmc_enable_counter, pmc_disable_counter, pmc_counter_isrunning, pmc_counter_isconfigured, pmc_configure_counter, pmc_get_counter_value, pmc_accumulate, pmc_alloc_kernel_counter, pmc_free_kernel_counter, pmc_start_profiling, pmc_stop_profiling, PMC_ENABLED -- Hardware Performance Monitoring Interface SYNOPSIS
#include <sys/pmc.h> int pmc_get_num_counters(void); int pmc_get_counter_type(int ctr); void pmc_save_context(struct lwp *l); void pmc_restore_context(struct lwp *l); int pmc_enable_counter(struct lwp *l, int ctr); int pmc_disable_counter(struct lwp *l, int ctr); int pmc_counter_isrunning(struct lwp *l, int ctr); int pmc_counter_isconfigured(struct lwp *l, int ctr); int pmc_configure_counter(struct lwp *l, int ctr, struct pmc_counter_cfg *cfg); int pmc_get_counter_value(struct lwp *l, int ctr, int flags, uint64_t *pval); int pmc_accumulate(struct lwp *l_parent, struct lwp *l_exiting); int pmc_alloc_kernel_counter(int ctr, struct pmc_counter_cfg *cfg); int pmc_free_kernel_counter(int ctr); int pmc_start_profiling(int ctr, struct pmc_counter_cfg *cfg); int pmc_stop_profiling(int ctr); int PMC_ENABLED(struct lwp *l); DESCRIPTION
Provides a machine-independent interface to the hardware performance counters which are available on several CPU families. The capabilities of these counters vary from CPU to CPU, but they basically count hardware events such as data cache hits or misses, branches taken, branched mispredicted, and so forth. Some can interrupt the processor when a certain threshold has been reached. Some can count events in user space and kernel space independently. The pmc interface is intended to allow monitoring from within the kernel as well as monitoring of userland applications. If the hardware can interrupt the CPU in a specific implementation, then it may also be used as a profiling source instead of the clock. IMPLEMENTATION NOTES
All function calls in this interface may be defined as cpp(1) macros. If any function is not implemented as a macro, its prototype must be defined by the port-specific header <machine/pmc.h>. Counters are numbered from 0 to N-1 where N is the number of counters available on the system (see pmc_get_num_counters() below). Upon a process fork, implementations must o Zero performance counters for the new process, and o Inherit any enabled performance counters. DATA TYPES
Each implementation must specify two new types: pmc_evid_t An integer type which can contain the event IDs for a given processor. pmc_ctr_t An integer type defining the value which may be contained in a given counter register. Counters are configured with the struct pmc_counter_cfg. This structure is defined as struct pmc_counter_cfg { pmc_evid_t event_id; pmc_ctr_t reset_value; uint32_t flags; }; flags are currently unused. FUNCTIONS
pmc_get_num_counters(void) Returns the number of counters present on the current system. Valid values for ctr in the interface entry points below are from zero to one less than the return value from this function. pmc_get_counter_type(int ctr) Returns an implementation-dependent type describing the specified counter. If ctr is specified as -1, returns a machine-dependent type describing the CPU or counter configuration. For example, on an ia32 architecture, it may distinguish between 586-, 686-, and K7-style counters. pmc_save_context(struct lwp *l) Saves the PMC context for the current process. This is called just before cpu_switch(9). If there is kernel PMC state, it must be maintained across this call. pmc_restore_context(struct lwp *l) Restores the PMC context for the current process. This is called just after cpu_switch(9) returns. If there is kernel PMC state, it must be maintained across this call. pmc_enable_counter(struct lwp *l, int ctr) Enables counter ctr for the specified process. The counter should have already been configured with a call to pmc_configure_counter(). This starts the counter running if it is not already started and enables any interrupts, as appropriate. pmc_disable_counter(struct lwp *l, int ctr) Disables counter ctr for the specified process. This stops the counter from running, and disables any interrupts, as appropriate. pmc_counter_isrunning(struct lwp *l, int ctr) Returns non-zero if the specified counter in the specified process is running or if the counter is running in the kernel. pmc_counter_isconfigured(struct lwp *l, int ctr) Returns non-zero if the specified counter in the specified process is configured or if the counter is in use by the kernel. pmc_configure_counter(struct lwp *l, int ctr, struct pmc_counter_cfg *cfg) Configures counter ctr according to the configuration information stored in cfg. pmc_get_counter_value(struct lwp *l, int ctr, int flags, uint64_t *pval) Returns the value of counter ctr in the space pointed to by pval. The only recognized flag is PMC_VALUE_FLAGS_CHILDREN which speci- fies that the returned counts should be accumulated values for any exited child processes. pmc_accumulate(struct lwp *l_parent, struct lwp *l_exiting) Accumulates any counter data from the exiting process p_exiting into the counters for the parent process p_parent. pmc_alloc_kernel_counter(int ctr, struct pmc_counter_cfg *cfg) Allocates counter ctr for use by the kernel and configures it with cfg. pmc_free_kernel_counter(int ctr) Returns counter ctr to the available pool of counters that may be used by processes. pmc_start_profiling(int ctr, struct pmc_counter_cfg *cfg) Allocates counter ctr for use by the kernel for profiling and configures it with cfg. pmc_stop_profiling(int ctr) Stops profiling with counter ctr. PMC_ENABLED(struct lwp *l) Returns non-zero if the given process or the kernel is using the PMC at all. SEE ALSO
pmc(1), pmc_control(2), pmc_get_info(2) HISTORY
The pmc interface appeared in NetBSD 2.0. AUTHORS
The pmc interface was designed and implemented by Allen Briggs for Wasabi Systems, Inc. Additional input on the pmc design was provided by Jason R. Thorpe. BSD
May 14, 2010 BSD
All times are GMT -4. The time now is 11:01 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy