Instead of opening and reading the insert file every time you need it as Don Cragun's fine solution does, you may want to read it once into memory and then reuse:
Code:
awk 'NR==1 {pr = 1}
NR==FNR {INS[++cnt]=$0; next}
/^<PersonInfoShipTo.*\/>$/ {
print $0
if (pr) for (i=1; i<=cnt; i++) print INS[i]
pr = !pr
next
}
pr
'
Not much difference in the logics as compared to the previous solution...
Thanks Rudi,
Excellent idea. Which solution is better depends on a few details that have not been mentioned.
If this script is in a loop processing a large number of files that don't all contain the markers and seldom contain more than one set of markers, my form may be better. If this script is processing several files at a time and they all use the same replacement text file or if multiple sets of markers are common in input files, Rudi's way is clearly better.
If the maximum size of the text in the replacement file is less than LINE_MAX on your system, you could also accumulate the replacement file into a single string (instead of the array of lines) and use a single print to copy it to the output instead of a loop. (This "optimization" probably wouldn't help unless there are several sets of markers being processed in each invocation of awk.)
The OP will know more about the input files and how the script will be used. WIth these details, maybe it will be easier to select the best approach for the real world data and the way this script will be used.
hi every one ,
here is my problem !!
i have to run my script from an account and update the result in a xml file located on a different account. i use existing ssh keys to do it remotely
for example the tags looks like this
<PropertyValueList... (1 Reply)
Hello,
I donot have exact lenght of the file.
But i want entire txt of the file to send it into one node.
for example I have txt file..
asdfghjklmnbvcxzqwertyuiop., nswwneikniniwn
so i need the output as
<documentbody>asdfghjklmnbvcxzqwertyuiop., ... (9 Replies)
Hi,
I need to parse text, xml files to get the statistic numbers and prepare summary csv file.
What is the best way to parse these file and prepare csv file.
Any idea you have , please?
Regards, (2 Replies)
Hi All,
I have a file, let's call it "info.tmp" that contains data like this ..
ABC123456
PCX333445
BCD789833
I need to read "info.tmp" and for each line add strings in a way that the final output is
put /logs/ua/dummy.trigger 'AAA00001.FTP.XXX.BLA03A01.xxxxxx(+1)'
where XXX... (5 Replies)
Hello everyone,
ive been trying to replace a string "kw01" in an xml file with the contents of a txt file having multiple lines. im a unix newbie and all the sed combinations i tried resulted to being garbled. Below is the contents of the txt file:
RAISEDATTIME
--------------------... (13 Replies)
Hi There...
I need to serach and replace strngs in a text file.
My file has;
books.amazon='Let me read'
news.bestseller='xyz'
expected output is
books.amazon=NONFOUND
news.bestseller=NONFOUND
Can I first find the text between string1= books.amazon=' and string2= ' (locate the text... (1 Reply)
Good afternoon!
I have an XML file from which I want to extract only certain elements contained within each line. The problem is that the format of each line is not exactly the same (though similiar). For example, oa_var will be in each line, however, there may be no value or other... (3 Replies)
Please I want to replace all the contents beween "Section" and "Ensection" in file1 with all contents in file2. Example:
file1:
Section "Screen"
DefaultDepth 24
SubSection "Display"
Depth 8
ViewPort 0 0
Modes "1024x768" "800x600" "640x480"
EndSubsection
SubSection "Display"
Depth... (9 Replies)
so...
Lets assume I have a text file.
The text file contains multiple "#" symbols.
I want to replace all thos "#"s with a STRING using DOS/Batch
I want to add a certain TEXT to the end of each line.
How can I do this WITHOUT aid of sed, grep or anything linux related ? (1 Reply)
Hi
I have a large txt file on my AIX server and I need to replace some text using two other files. So filename1 has about 500 lines similar to:
txtcode SYStem100
I have the string I want to change in string2 and the new stringname in string3. Does anyone know a way of doing this? I have... (1 Reply)
Discussion started by: Grueben
1 Replies
LEARN ABOUT NETBSD
pcap_loop
PCAP_LOOP(3) Library Functions Manual PCAP_LOOP(3)NAME
pcap_loop, pcap_dispatch - process packets from a live capture or savefile
SYNOPSIS
#include <pcap/pcap.h>
typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h,
const u_char *bytes);
int pcap_loop(pcap_t *p, int cnt,
pcap_handler callback, u_char *user);
int pcap_dispatch(pcap_t *p, int cnt,
pcap_handler callback, u_char *user);
DESCRIPTION
pcap_loop() processes packets from a live capture or ``savefile'' until cnt packets are processed, the end of the ``savefile'' is reached
when reading from a ``savefile'', pcap_breakloop() is called, or an error occurs. It does not return when live read timeouts occur. A
value of -1 or 0 for cnt is equivalent to infinity, so that packets are processed until another ending condition occurs.
pcap_dispatch() processes packets from a live capture or ``savefile'' until cnt packets are processed, the end of the current bufferful of
packets is reached when doing a live capture, the end of the ``savefile'' is reached when reading from a ``savefile'', pcap_breakloop() is
called, or an error occurs. Thus, when doing a live capture, cnt is the maximum number of packets to process before returning, but is not
a minimum number; when reading a live capture, only one bufferful of packets is read at a time, so fewer than cnt packets may be processed.
A value of -1 or 0 for cnt causes all the packets received in one buffer to be processed when reading a live capture, and causes all the
packets in the file to be processed when reading a ``savefile''.
(In older versions of libpcap, the behavior when cnt was 0 was undefined; different platforms and devices behaved differently, so code that
must work with older versions of libpcap should use -1, nor 0, as the value of cnt.)
callback specifies a pcap_handler routine to be called with three arguments: a u_char pointer which is passed in the user argument to
pcap_loop() or pcap_dispatch(), a const struct pcap_pkthdr pointer pointing to the packet time stamp and lengths, and a const u_char
pointer to the first caplen (as given in the struct pcap_pkthdr a pointer to which is passed to the callback routine) bytes of data from
the packet.
RETURN VALUE
pcap_loop() returns 0 if cnt is exhausted, -1 if an error occurs, or -2 if the loop terminated due to a call to pcap_breakloop() before any
packets were processed. It does not return when live read timeouts occur; instead, it attempts to read more packets.
pcap_dispatch() returns the number of packets processed on success; this can be 0 if no packets were read from a live capture (if, for
example, they were discarded because they didn't pass the packet filter, or if, on platforms that support a read timeout that starts before
any packets arrive, the timeout expires before any packets arrive, or if the file descriptor for the capture device is in non-blocking mode
and no packets were available to be read) or if no more packets are available in a ``savefile.'' It returns -1 if an error occurs or -2 if
the loop terminated due to a call to pcap_breakloop() before any packets were processed. If your application uses pcap_breakloop(), make
sure that you explicitly check for -1 and -2, rather than just checking for a return value < 0.
If -1 is returned, pcap_geterr() or pcap_perror() may be called with p as an argument to fetch or display the error text.
SEE ALSO pcap(3), pcap_geterr(3), pcap_breakloop(3)
24 December 2008 PCAP_LOOP(3)