Path: utzoo!utgpu!news-server.csri.toronto.edu!rutgers!usc!samsung!emory!mephisto!prism!sun13!VSSERV.SCRI.FSU.EDU!mayne From: mayne@VSSERV.SCRI.FSU.EDU (William (Bill) Mayne) Newsgroups: comp.unix.wizards Subject: awk arguments Keywords: awk Message-ID: <290@sun13.scri.fsu.edu> Date: 23 Jul 90 13:56:42 GMT Sender: news@sun13.scri.fsu.edu Followup-To: mayne@nu.cs.fsu.edu Organization: SCRI, Florida State University Lines: 41 I have had a problem with the syntax of the awk command for some time. I quote from the man pages for awk from SunOS: > > SYNOPSIS > awk [ -f program-file ] [ -Fc ] [ program ] [ variable > =value ... ] [ filename...] > Since unix file names may contain an = this is clearly ambiguous. Does awk '{print $0; print $Y}' Y=X print lines from standard input separated by a line containing "X" or does it print lines from the file Y=X separated by blank lines, since without the assignment the value Y in awk should be null? Either interpretation would be justified by the syntax. The command could be parsed where Y=X is either [variable=value] or [filename...]. In fact it does neither. In this case, whether a file named Y=X exists or not, standard input is not read and nothing is printed. The practical problem this raises is how to communicate an argument value or a value calculated by a script file into an awk program embedded in a script file. Referencing $n in the quoted awk program won't work, since awk will think that refers to field number n. Similarly any other reference to a shell variable will be interpreted as a reference to an awk variable. I have never been able to get the command line assignment of awk variables to work. I have sometimes resorted to ugly kludges like using sed to modify an awk program to hard code argument values. Surely I have missed something obvious. There must be a better way. I would be most grateful if someone would suggest one. While I am on the subject of awk: I learned about the language from the book "The AWK Programming Language" by Kernighan et. al. before I started working on unix. I have been disappointed to find that the version actually available on every flavor of unix I have seen is much weaker than the full version described by the book. Are there better versions out there?