Sponsored Content
Top Forums UNIX for Advanced & Expert Users AWK sub function curious problem under bash Post 302370479 by Max Rebo on Wednesday 11th of November 2009 02:11:08 PM
Old 11-11-2009
AWK sub function curious problem under bash

I need to detect the number of pages in a print job when it is available so I can warn users when they try to print a report much larger than they expected. Sometimes they are trying to print 1000 page reports when they thought they were getting a 10 page report.

Under linux I am scanning the print job before it goes to the printer and want the user to be able to cancel the print job if it is not what they expected.

This current function works, but is not exactly what I wanted:

Code:
 
function get-last-page() 
{ 
awk '/Page/{ f=$NF }; END{ print f }' $1 | awk '{ sub(/Page/,""); print }'; 
}

In my test case the page numbers can be found on the top of each page after the word "Page". -but- sometimes the page count abuts the "Page" label so the above function could return "Page2308" when there is no white space between the regex "Page" and the desired number. There is no problem when there is white space.

Simple answer, just sub out the /Page/ unconditionally and I always get the last page number of the report. -but- I originally tried it like this (using only one awk call) and I cannot for the life of me make it work properly:

Code:
 
function get-last-page() 
{
awk '/Page/{ f=$NF }; END{ print sub(/Page/,"",f); }' $1; 
}

The above function does not return the desired 2308 (or whatever). I cannot make out what is wrong. If I change it to the following I get what I expect, including the "Page2308":

Code:
 
function get-last-page() 
{
awk '/Page/{ f=$NF }; END{ print f }' $1; 
}

The above behaves as I expect, but has the error I am trying to fix with the second example. I don't understand why I can't do the substitution in the END{} clause but can do it after the pipe (as in the first example).

I really was hoping to get this to work as a sort-of one-liner.

Can anyone help me either fix this or at least understand why it does not work?

I am running under a bash shell on openSuSE 10.3 linux.

TIA
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

problem in awk int() function

awk -vwgt=$vWeight -vfac=$vFactor ' BEGIN { printf("wgt:" wgt "\n"); printf("factor:" fac "\n"); total = sprintf("%.0f", wgt * fac); total2 = sprintf("%.0f", int(wgt * fac)); printf("total:" total "\n"); printf("total2:" total2 "\n"); } ' if vWeight=326.4 vFactor=100 the result... (2 Replies)
Discussion started by: qa.bingo
2 Replies

2. Shell Programming and Scripting

awk , function call problem

#!/bin/bash awk ' function ad(t,r){ return (t+r); } BEGIN{ print ad(5,3); } { print ad(5,3); } ' Doesn't print anything for the last print ad(5,3); (6 Replies)
Discussion started by: cola
6 Replies

3. Shell Programming and Scripting

Awk problem: How to express the single quote(') by using awk print function

Actually I got a list of file end with *.txt I want to use the same command apply to all the *.txt Thus I try to find out the fastest way to write those same command in a script and then want to let them run automatics. For example: I got the file below: file1.txt file2.txt file3.txt... (4 Replies)
Discussion started by: patrick87
4 Replies

4. Shell Programming and Scripting

AWK Problem in recursive function

Hi, I have a file like this SPF_HC00001|iCalcular_Monto_Minimo|--->|SPF_HC00028|pstcObtener_Monto_Minimo SPF_HC00004|iCalcular_Incrementos|--->|SPF_HC00032|pstcObtener_Num_Incrementos SPF_HC00005|iCalcular_Articulo_167_Reformado|--->|SPF_HC00031|pstcObtener_Por_CB_Inc... (2 Replies)
Discussion started by: kcoder24
2 Replies

5. Shell Programming and Scripting

Problem using function in awk

I created two functions that output two random variables. I want to output them in the output file. But it does not seem to work. # Function rgaussian1(r1, r2) # Gaussian random number generator function rgaussian1(r1, r2) { pi = 3.142 v1 = sqrt( -2 * log(rand()) ) v2... (18 Replies)
Discussion started by: kristinu
18 Replies

6. Solaris

Curious MPxIO problem

Hello folks, I have a newly installed Solaris 10 system running on a T6320 blade. I have set up LDM with the intent to move an ldom from another blade to this one. So far, so good. I had the SAN folks make the LUNs belonging to the ldom visible to my new blade and I can see them, all 4 paths.... (4 Replies)
Discussion started by: Ranck
4 Replies

7. UNIX for Dummies Questions & Answers

New problem with awk using bash

Hi! I have a new problem with awk, this time I think is because I'm using it in bash and I don't know how to put the valor of the variable in awk. Here is the code: #!/bin/bash for i in 1 2 3 4 5 do a=$i b=$ awk '$1>=a&&$1<=b {print $1,$2,$3}'>asdf test... (3 Replies)
Discussion started by: florpi
3 Replies

8. Shell Programming and Scripting

Bash function problem

I am trying to figure out why I am having a "problem" with some functions in a bash script I am running. The reason for air quoting is that the functions are working, they are just not displaying anything to screen when called from another function. Here's an example: function Create_Input {... (6 Replies)
Discussion started by: dagamier
6 Replies

9. Shell Programming and Scripting

Bash script: problem with a function which use colors

Hello guys :) I've a some issue with a function which use the bash colors in my script. An example : #!/bin/bash set -x log_in(){ host="srv1" remote_files="log/" LOG_FILE="logfile" green='\033]; then color_in_red=("${red}"$2"${none}") echo -e... (2 Replies)
Discussion started by: Arnaudh78
2 Replies

10. Shell Programming and Scripting

awk call in bash function called with arugments not working, something lost in translation?

Hello, I have this awk code in a bash script to perform a find and replace task. This finds one unique line in a file and substitutes the found line with a replacement. #! /bin/bash # value determined elsewhere total_outputs_p1=100 # file being modified... (5 Replies)
Discussion started by: LMHmedchem
5 Replies
cancel(1)																 cancel(1)

NAME
cancel - cancel print request SYNOPSIS
cancel [ request-ID...] [destination...] cancel -u user... [destination...] The cancel utility cancels print requests. There are two forms of the cancel command. The first form of cancel has two optional arguments: print requests (request-ID) and destinations (destination). Specifying request-ID with destination cancels request-ID on destination. Specifying only the destination cancels the current print request on destination. If desti- nation is not specified, cancel cancels the requested print request on all destinations. The second form of cancel cancels a user's print requests on specific destinations. Users can only cancel print requests associated with their username. By default, users can only cancel print requests on the host from which the print request was submitted. If a super-user has set user-equivalence=true in /etc/printers.conf on the print server, users can cancel print requests associated with their username on any host. Super-users can cancel print requests on the host from which the print request was submitted. Superusers can also cancel print requests from the print server. The print client commands locate destination information using the printers database in the name service switch. See nsswitch.conf(4), printers(4), and printers.conf(4) for details. The following options are supported: -u user The name of the user for which print requests are to be cancelled. Specify user as a username. The following operands are supported: destination The destination on which the print requests are to be canceled. destination is the name of a printer or class of printers (see lpadmin(1M)). If destination is not specified, cancel cancels the requested print request on all destinations. Specify destination using atomic or POSIX-style (server:destination), names. See for information regarding using POSIX-style des- tination names with cancel. See standards(5) for information regarding POSIX. request-ID The print request to be canceled. Specify request-ID using LP-style request IDs (destination-number). user The name of the user for which the print requests are to be cancelled. Specify user as a username. The following exit values are returned: 0 Successful completion. non-zero An error occurred. /var/spool/print/* LP print queue. $HOME/.printers User-configurable printer database. /etc/printers.conf System printer configuration database. printers.conf.byname NIS version of /etc/printers.conf. printers.org_dir NIS+ version of /etc/printers.conf. See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Availability |SUNWpcu | +-----------------------------+-----------------------------+ lp(1), lpq(1B), lpr(1B), lprm(1B), lpstat(1), lpadmin( 1M), nsswitch.conf(4), printers(4), printers.conf(4), attributes(5), standards(5) POSIX-style destination names (server:destination) are treated as print requests if destination has the same format as an LP-style request- ID. See standards(5). Some print servers send cancelation notification to job owners when their print jobs have been cancelled. This notification usually comes in the form of an email message. Cancelation notices cannot be disabled on a Solaris server. 23 Feb 2005 cancel(1)
All times are GMT -4. The time now is 12:45 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy