![]() |
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Parse an XML task list to create each task.xml file | MissI | Shell Programming and Scripting | 3 | 11-11-2008 02:20 PM |
| comment and Uncomment single task out of multiple task | madhusmita | Shell Programming and Scripting | 9 | 06-18-2008 10:42 AM |
| Arithmetic Operators | filda | UNIX for Dummies Questions & Answers | 0 | 06-13-2008 01:55 AM |
| Can I use wc -l with arithmetic expression? | lalelle | Shell Programming and Scripting | 3 | 08-11-2007 07:44 PM |
| arithmetic in ksh | amon | Shell Programming and Scripting | 12 | 02-05-2007 02:43 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
||||
|
sed or awk for arithmetic task
I have file with this type of format
01.02.09 08:30 bob jill mark 01.04.09 07:00 bob jill mark tom I want to count the names after the date /ime line (01.02.09 08:30) and add that number after the time like this 01.02.09 08:30 3 01.04.09 07:00 4 I don't care about the names after the count so I can leave them or strip the out with sed if it simplifies the process. I could also redirect the output of date/time and count to second file if it makes it simpler. The only thing I really need is the date/time and number on the same line. What is the best tool to accomplish this and can someone provide an example? |
|
||||
|
Almost it
Nice...
I had to add space to "" and change NF-1 to NF-2 to get accurate count for all lines except the last and first entry. NF-1 gives the correct output for the last line count only. I have 9,000 lines so I having the last and first wrong is not significant issue. The next problem is that output only has the time in the line like this: 10:00 4 11:00 6 I need the date in the output. Currently looking through the nawk manual to figure out how to combine time and date into output. Any quick suggestions? BTW, running nawk 1.3.3 from Ubuntu 8.10 |
|
||||
|
input: Code:
01.02.09 08:30 bob jill mark 01.04.09 07:00 bob jill mark tom 01.02.09 09:30 bob jill mark hj gh fm 01.04.09 10:00 bob jill mark tom aaa bbb ccc output: Code:
01.02.09 08:30 3 01.04.09 07:00 4 01.02.09 09:30 6 01.04.09 10:00 7 code: Code:
#!/usr/bin/perl
$/="\n\n";
open FH,"<a.txt";
while(<FH>){
my @temp=split("\n",$_);
print $temp[0]," ",$#temp,"\n";
}
Code:
awk '/[0-9]*\.[0-9]*\.[0-9]* [0-9][0-9]:[0-9][0-9]/{
a=$0
next
}
/^ *$/{
print a" "n
n=0
next
}
{
n++
}
' a.txt
Last edited by summer_cherry; 02-11-2009 at 11:54 PM.. |
|
|||||
|
Quote:
mar.txt: Code:
01.02.09 08:30 bob jill mark 01.04.09 07:00 bob jill mark tom nawk 'BEGIN {RS=FS=""} {print $1, NF-1}' mar.txt output: Code:
01.02.09 08:30 3 01.04.09 07:00 4 Looks fine to me. Post your input file (or a portion of it) using vB Code tags. |
|
||||
|
response
Using the same data you had example, I got the following:
nawk 'BEGIN {RS=FS=""} {print $1, NF-1}' data.txt 0 27 0 31 Adding space to "" $ nawk 'BEGIN {RS=FS=" "} {print $1, NF-1}' data.txt 01.02.09 0 08:30 4 07:00 4 Changing to NF-2 $ nawk 'BEGIN {RS=FS=" "} {print $1, NF-2}' data.txt 01.02.09 -1 08:30 3 07:00 3 |
![]() |
| Bookmarks |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|