Sponsored Content
Top Forums Shell Programming and Scripting sed/awk: Delete matching words leaving only the first instance Post 302388190 by alister on Tuesday 19th of January 2010 05:21:46 PM
Old 01-19-2010
Code:
$ cat data
on Caturday 22 at 10:15, some event
on Caturday 22 at 10:15, some other, comma event
on Caturday 22 at 21:30, even more events
on Funday 23 at 11:00, yet another event

$ awk -F' at |, ' 'd!=$1 {if(s)print s; s=$0; d=$1; t=$2; next} t!=$2 {t=$2; s=s"; at "$2","substr($0,index($0,",")+1); next} {s=s";"substr($0,index($0,",")+1)} END {print s}' data
on Caturday 22 at 10:15, some event; some other, comma event; at 21:30, even more events
on Funday 23 at 11:00, yet another event

d=day
t=time
s=string being built for printing

Alister

---------- Post updated at 05:14 PM ---------- Previous update was at 04:40 PM ----------

A bit shorter, if not clearer Smilie

Code:
awk -F' at |, ' 'd!=$1 {if(s)print s; s=$0; d=$1; t=$2; next} (e=substr($0,index($0,",")+1)) && t!=$2 {t=$2; s=s"; at "$2","e; next} {s=s";"e} END {print s}' data

e=event text

---------- Post updated at 05:21 PM ---------- Previous update was at 05:14 PM ----------

If you are certain that ", " (comma-space) and " at " (space-a-t-space) sequences will not appear in the event text, then this simpler code will do:

Code:
awk -F' at |, ' 'd!=$1 {if(s)print s; s=$0; d=$1; t=$2; next} t!=$2 {t=$2; s=s"; at "$2", "$3; next} {s=s"; "$3} END {print s}' data


Last edited by alister; 01-19-2010 at 06:14 PM.. Reason: Added code tags
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

sed option to delete two words within a file

Could someone please help me with the following. I'm trying to figure out how to delete two words within a specific file using sed. The two words are directory and named. I have tried the following: sed '//d' sedfile sed '//d' sedfile both of these options do not work..... ... (4 Replies)
Discussion started by: klannon
4 Replies

2. UNIX for Dummies Questions & Answers

sed [delete everything between two words]

Hi, I have the following codes below that aims to delete every words between two pattern word. Say I have the files To delete every word between WISH_LIST=" and " I used the below codes (but its not working): #!/bin/sh sed ' /WISH_LIST=\"/ { N /\n.*\"/ {... (3 Replies)
Discussion started by: Orbix
3 Replies

3. Shell Programming and Scripting

sed find matching pattern delete next line

trying to use sed in finding a matching pattern in a file then deleting the next line only .. pattern --> <ad-content> I tried this but it results are not what I wish sed '/<ad-content>/{N;d;}' akv.xml > akv5.xml ex, <Celebrant2First>Mickey</Celebrant2First> <ad-content> Minnie... (2 Replies)
Discussion started by: aveitas
2 Replies

4. Shell Programming and Scripting

SED: delete matching row and 4 next rows?

Hi, Tried to look for solution, and found something similar but could not adapt the solution for my needs.. I'm trying to match a pattern (in this case "ProcessType")in a logfile, then delete that line and the 4 following lines. The logfile looks as follows: ProcessType: PROCESS_A... (5 Replies)
Discussion started by: Juha
5 Replies

5. UNIX for Dummies Questions & Answers

sed how to delete between two words within a file

I'm hoping someone could help me out please :) I have several .txt files with several hundred lines in each that look like this: 10241;</td><td>10241</td><td class="b">x2801;</td><td>2801</td><td>TEXT-1</td></tr> 10242;</td><td>10242</td><td... (4 Replies)
Discussion started by: martinsmith
4 Replies

6. UNIX for Dummies Questions & Answers

Delete all rows but leaving first and last ones

Hello, Merry Christmas to all! I wish you the best for these holidays and the best for the next year 2011. I'd like your help please, I need to delete all the rows in the third column of my file, but without touching nor changing the first and last value position, this is an example of my... (2 Replies)
Discussion started by: Gery
2 Replies

7. Shell Programming and Scripting

Using Sed to Delete Words in a File

This is a Nagios situation. So i have a list of servers in one file called Servers.txt And in another file called hostgroups.cfg, i want to remove each and every one of the servers in the Servers.txt file. The problem is, the script I wrote is having a problem removing the exact servers in... (5 Replies)
Discussion started by: SkySmart
5 Replies

8. Shell Programming and Scripting

SED - delete words between two possible words

Hi all, I want to make an script using sed that removes everything between 'begin' (including the line that has it) and 'end1' or 'end2', not removing this line. Let me paste an 2 examples: anything before any string begin few lines of content end1 anything after anything before any... (4 Replies)
Discussion started by: meuser
4 Replies

9. Shell Programming and Scripting

sed or awk delete character in the lines before and after the matching line

Sample file: This is line one, this is another line, this is the PRIMARY INDEX line l ; This is another line The command should find the line with “PRIMARY INDEX” and remove the last character from the line preceding it (in this case , comma) and remove the first character from the line... (5 Replies)
Discussion started by: KC_Rules
5 Replies

10. Shell Programming and Scripting

Seemingly simple sed, delete between matching lines

There are many matching blocks of text in one file that need to be deleted. This example below is one block that needs to be either deleted or replaced with an empty line. This text below is the input file. The ouput file should be empty Searching Checks. Based on search criteria name: Value :... (2 Replies)
Discussion started by: bash_in_my_head
2 Replies
iosnoop(1m)							   USER COMMANDS						       iosnoop(1m)

NAME
iosnoop - snoop I/O events as they occur. Uses DTrace. SYNOPSIS
iosnoop [-a|-A|-Deghinostv] [-d device] [-f filename] [-m mount_point] [-n name] [-p PID] DESCRIPTION
iosnoop prints I/O events as they happen, with useful details such as UID, PID, block number, size, filename, etc. This is useful to determine the process responsible for using the disks, as well as details on what activity the process is requesting. Be- haviour such as random or sequential I/O can be observed by reading the block numbers. Since this uses DTrace, only users with root privileges can run this command. OPTIONS
-a print all data -A dump all data, space delimited -D print time delta, us (elapsed) -e print device name -i print device instance -N print major and minor numbers -o print disk delta time, us -s print start time, us -t print completion time, us -v print completion time, string -d device instance name to snoop (eg, dad0) -f filename full pathname of file to snoop -m mount_point mountpoint for filesystem to snoop -n name process name -p PID process ID EXAMPLES
Default output, print I/O activity as it occurs, # iosnoop Print human readable timestamps, # iosnoop -v Print major and minor numbers, # iosnoop -N Snoop events on the root filesystem only, # iosnoop -m / FIELDS
UID User ID PID Process ID PPID Parent Process ID COMM command name for the process ARGS argument listing for the process SIZE size of the operation, bytes BLOCK disk block for the operation (location. relative to this filesystem. more useful with the -N option to print major and minor num- bers) STIME timestamp for the disk request, us TIME timestamp for the disk completion, us DELTA elapsed time from request to completion, us (this is the elapsed time from the disk request (strategy) to the disk completion (iodone)) DTIME time for disk to complete request, us (this is the time for the disk to complete that event since it's last event (time between iodones), or, the time to the strategy if the disk had been idle) STRTIME timestamp for the disk completion, string DEVICE device name INS device instance number D direction, Read or Write MOUNT mount point FILE filename (basename) for I/O operation NOTES
When filtering on PID or process name, be aware that poor disk event times may be due to events that have been filtered away, for example another process that may be seeking the disk heads elsewhere. DOCUMENTATION
See the DTraceToolkit for further documentation under the Docs directory. The DTraceToolkit docs may include full worked examples with ver- bose descriptions explaining the output. EXIT
iosnoop will run forever until Ctrl-C is hit. AUTHOR
Brendan Gregg [Sydney, Australia] SEE ALSO
iotop(1M), dtrace(1M) version 1.50 Jul 25, 2005 iosnoop(1m)
All times are GMT -4. The time now is 12:51 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy