![]() |
|
|
|
|
|||||||
| Forums | Portal | Register | Forum Rules | FAQ | Contribute | Members List | Arcade | Search | Today's Posts | Mark Forums Read |
| UNIX for Dummies Questions & Answers If you're not sure where to post a UNIX or Linux question, post it here. All UNIX and Linux newbies welcome !! |
|
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Using cp -r command to selectively omit *.dat files while copying a directory. | d_sai_kumar | UNIX for Dummies Questions & Answers | 5 | 07-18-2008 03:48 AM |
| need assistance: sed and repeating patterns | metalwarrior | UNIX for Advanced & Expert Users | 1 | 02-02-2008 01:00 AM |
| Loop through files in dir, omit file with latest date | stringzz | Shell Programming and Scripting | 2 | 12-04-2007 10:04 AM |
| merge 2 files (without repeating any lines) | bluemoon1 | Shell Programming and Scripting | 9 | 10-25-2007 07:31 PM |
| Repeating commands in a script | Dave2874 | Shell Programming and Scripting | 4 | 03-14-2005 06:34 AM |
|
|
Submit Tools | LinkBack | Thread Tools | Display Modes |
|
|||
|
Omit repeating lines
Can someone help me with the following 2 objectives?
1) The following command is just an example. It gets a list of all print jobs. From there I am trying to extract the printer name. It works with the following command: Code:
lpstat -W "completed" -o | awk -F- '{ print $1}'
Code:
My_office_printer My_office_printer My_office_printer My_home_printer My_home_printer Code:
My_office_printer My_home_printer 2) In the previous section, I want to reduce the number of lines returned to one per printer. Before I do, I want to count how many there are. For example, how many time was My_office_printer listed. Any help is greatly appreciated.... |
| Forum Sponsor | ||
|
|
|
|||
|
OK, my next question on this:
Code:
lpstat -W "completed" -o | grep "testguy" | awk -F- '{arr[$1]++}END {for (i in arr) printf("Printer: %s Jobs: %d\n", i, arr[i])}'
For example: Code:
Printer: My_office_printer Jobs: 21 User: testguy |
|
|||
|
OK, here's the deal (my head is starting to hurt here)
I need to get the number of Jobs that are printed on each printer, per date, by user. What you did earlier helped get the printer name and number of jobs. I tried to change it a little, so I can get some more info (the date) out of it. So, if I enter "testguy" as my user (variable from other script), then I want the following returned: Code:
Tue Feb 22: My_office_printer: 3 Jobs - My_home_printer: 5 Jobs" Mon Feb 21: My_office_printer: 2 Jobs - My_home_printer: 8 Jobs" Fri Feb 18: Someone_elses_printer: 9 Jobs etc.... I'll try to explain it better, but I thought I would post this anyway... In case it helps, here is all the info returned by Code:
lpstat -W "completed" -o | grep "testguy" Code:
My_office_printer-494 testguy 23552 Fri Feb 18 09:54:42 2005 I need to strip the unique job number from the name of the printer (different for each entry, in this case it's -494). The 23552 is the number of bytes the job is, don't need that, and I don't need the time and year. So, really, what I need here is $1,$2,$4,$5,$6, and $1 has to be without the -494 or whatever the unique job number is). Last edited by TheCrunge; 02-22-2005 at 12:21 PM. |
|
||||
|
how about something like that for starters:
lpstat -W "completed" -o | grep "testguy" | nawk -f crunge.awk here's crunge.awk: Code:
BEGIN{
FLDprt="1"
FLDusr="2"
}
{
printer=substr($FLDprt,1,index($0,"-")-1)
date=$(FLDusr+2) " " $(FLDusr+3) " "$(FLDusr+4)
dates[date]
arr[date, printer]++;
}
END {
for (dateI in dates) {
printf("%s:", dateI);
for (dataI in arr) {
split(dataI, dataIa, SUBSEP)
if (dataIa[1] == dateI) {
printf(" %s: %d Jobs - ",
dataIa[2], arr[dataI])
delete arr[dataI];
}
}
print "\"\n"
}
}
|
||||
| Google The UNIX and Linux Forums |