Sponsored Content
Top Forums Shell Programming and Scripting Awk Multiple Field Separators Post 49658 by google on Wednesday 7th of April 2004 07:04:46 AM
Old 04-07-2004
Awk takes input and creates "records" by delimiting by the value of RS. Awk delimits each "record" by the value of "FS", the field separator. You can then slice and dice each value of a field at your whim. In addition, if you dont have an easy way to split records and fields, Awk (gawk) allows you to define your own record by specifying column widths using the FIELDWIDTHS variable. Example
Code:
BEGIN  { FIELDWIDTHS = "9 6 10 6 7 7 35" }

.....will define a record of fixed width including whitespace between columns. So $1 is defined as a field of 9 bytes, $2 is defined as a field of 6 bytes and so on.

This is a pretty good tutorial on Awk. GNU Awk Tutorial

Last edited by rbatte1; 12-17-2019 at 10:05 AM..
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Multiple input field Separators in awk.

I saw a couple of posts here referencing how to handle more than one input field separator in awk. I figured I would share how I (just!) figured out how to turn this line in a logfile: 90000000000000000000010001 name... (4 Replies)
Discussion started by: kinksville
4 Replies

2. UNIX for Dummies Questions & Answers

Multiple field separators in awk? (First a space, then a colon)

How do I deal with extracting a portion of a record when multiple field separators are involved. Let's say I have: Mike Harrington;(555) 555-5555:250:100:175 Christian Dobbins;(555) 555-2358:155:90:201 Susan Dalsass;(555) 555-6279:250:60:50 Archie McNichol;(555) 555-1348:250:100:175 Jody... (3 Replies)
Discussion started by: doubleminus
3 Replies

3. Shell Programming and Scripting

AWK multiple fields separators

I need to print the second field of a file, taking spaces, tab and = as field separators. ; for 16-bit app support MAPI=1 CMC=1 CMCDLLNAME32=mapi32.dll CMCDLLNAME=mapi.dll MAPIX=1 MAPIXVER=1.0.0.1 OLEMessaging=1 asf=MPEGVideo asx=MPEGVideo ivf=MPEGVideo m3u=MPEGVideo (2 Replies)
Discussion started by: PamPam
2 Replies

4. UNIX Desktop Questions & Answers

awk Varing Field Separators

Hi Guys, I have small dilemma which I could do with a little help solving . I currently have text HDD S.M.A.R.T report which I have pasted below: smartctl 5.39 2008-10-24 22:33 (openSUSE RPM) Copyright (C) 2002-8 by Bruce Allen, http://smartmontools.sourceforge.net Device: COMPAQ... (2 Replies)
Discussion started by: bikerben
2 Replies

5. Shell Programming and Scripting

Comparing the matches in two files using awk when both files have their own field separators

I've two files with data like below: file1.txt: AAA,Apples,123 BBB,Bananas,124 CCC,Carrot,125 file2.txt: Store1|AAA|123|11 Store2|BBB|124|23 Store3|CCC|125|57 Store4|DDD|126|38 So,the field separator in file1.txt is a comma and in file2.txt,it is | Now,the output should be... (2 Replies)
Discussion started by: asyed
2 Replies

6. UNIX for Dummies Questions & Answers

Can one use 2 field separators in awk?

I have files such as n02-z30-dsr65-terr0.25-dc0.008-16x12drw-run1.cmd I am wondering if it is possible to define two field separators "-" and "." for these strings so that $7 is run1. (5 Replies)
Discussion started by: kristinu
5 Replies

7. Shell Programming and Scripting

Multiple long field separators

How do I use multiple field separators in awk? I know that if I use awk -F"", both a and b will be field separators. But what if I need two field separators that both are longer than one letter? If I want the field separators to be "ab" and "cd", I will not be able to use awk -F"". The ... (2 Replies)
Discussion started by: locoroco
2 Replies

8. Shell Programming and Scripting

awk multiple fields separators

Can you please help me with this .... Input File share "FTPTransfer" "/v31_fs01/root/FTP-Transfer" umask=022 maxusr=4294967295 netbios=NJ09FIL530 share "Test" "/v31_fs01/root/Test" umask=022 maxusr=4294967295 netbios=NJ09FIL530 share "ENR California" "/v31_fs01/root/ENR California"... (14 Replies)
Discussion started by: greycells
14 Replies

9. Shell Programming and Scripting

awk multiple filed separators

There is an usual ifconfig output vlan30 Link encap:Ethernet HWaddr inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: 2407:4c00:0:1:aaff::1/64 Scope:Global inet6 addr: fe80::224:e8ff:fe6b:cc4f/64 Scope:Link UP BROADCAST... (1 Reply)
Discussion started by: urello
1 Replies

10. Shell Programming and Scripting

Parsing out data with multiple field separators

I have a large file that I need to print certain sections out of. file.txt /alpha/beta/delta/gamma/425/590/USC00015420.blah.lt.0.01.str:USC00015420Y2017M10BLALT.01 12 13 14 -9 1 -9 -9 -9 -9 -9 1 2 3 4 5 -9 -9 I need to print the "USC00015420" and... (5 Replies)
Discussion started by: ncwxpanther
5 Replies
AWK  is  a  programming  language devised by Aho, Weinberger, and
Kernighan at Bell Labs (hence the  name).   Awk  programs  search
files for specific patterns and performs actions for every occur-
rence of these patterns.  The patterns can be regular expressions
as used in the ed editor.  The actions are expressed using a sub-
set of the C language.	The  patterns  and  actions  are  usually
placed	in  a rules file whose name must be the first argument in
the command line, preceded by the flag -f.  Otherwise, the  first
argument  on  the command line is taken to be a string containing
the rules themselves. All other arguments are  taken  to  be  the
names  of text files on which the rules are to be applied, with -
being the standard input.  To take rules from the standard input,
use -f -.  The command: would read the patterns and actions rules
from the file rules and apply them to  all  the  arguments.   The
general  format  of  a	rules  file is: ~~~<pattern> { <action> }
~~~<pattern> { <action> } ~~~...  There  may  be  any  number  of
these  <;pattern>  {  <action> } sequences in the rules file.  Awk
reads a line of input from the current input file and applies ev-
ery <;pattern> { <action> } in sequence to the line.  If the <pat-
tern>; corresponding to any { <action> } is missing, the action is
applied  to  every line of input.  The default { <action> } is to
print the matched input line.  The <;pattern>s may consist of  any
valid C expression.  If the <;pattern> consists of two expressions
separated by a comma, it is taken to be a range and the  <;action>
is  performed  on all lines of input that match the range.  <;pat-
tern>;s may contain regular expressions delimited by an @  symbol.
Regular  expressions  can be thought of as a generalized wildcard
string matching mechanism, similar to that used by many operating
systems  to  specify file names.  Regular expressions may contain
any of the following characters:
  x    An ordinary character
      The backslash quotes any character
  ^    A circumflex at the beginning of an expr matches  the  be-
       ginning of a line.
  $    A  dollar-sign at the end of an expression matches the end
       of a line.
  .    A period matches any single character except newline.
  *    An expression followed by an asterisk matches zero or more
       occurrences  of	that  expression: fo* matches f, fo, foo,
       fooo, etc.
  +    An expression followed by a plus sign matches one or  more
       occurrences of that expression: fo+ matches fo, foo, fooo,
       etc.
  []   A string enclosed in square brackets  matches  any  single
       character  in  that  string,  but no others.  If the first
       character in the string is a  circumflex,  the  expression
       matches any character except newline and the characters in
       the string.  For example, [xyz] matches xx and zyx,  while
       [^xyz] matches abc but not axb.	A range of characters may
       be specified by two characters separated by -.
Actions are expressed as a subset of the C language.   All  vari-
ables  are  global and default to int's if not formally declared.
Only char's and int's and pointers and arrays of char and int are
allowed.   Awk allows only decimal integer constants to be used--
no hex (0xnn) or octal (0nn). String and character constants  may
contain  all  of  the special C escapes (
, 
, etc.).  Awk sup-
ports the if, else, while and break flow of  control  constructs,
which  behave  exactly as in C.  Also supported are the following
unary and binary operators, listed in order from highest to  low-
est precedence:
  Operator	 Type	      Associativity
  () [] 	 unary	      left to right
  ! ~ ++ -- - * &	      unaryright to left
  * / % 	 binary       left to right
  + -		 binary       left to right
  << >> 	 binary       left to right
  < <= > >=	 binary       left to right
  == != 	 binary       left to right
  &		 binary       left to right
  ^		 binary       left to right
  |		 binary       left to right
  &&		 binary       left to right
  ||		 binary       left to right
  =		 binary       right to left
Comments are introduced by a '#' symbol and are terminated by the
first newline character.  The standard /* and */  comment  delim-
iters  are not supported and will result in a syntax error.  When
awk reads a line from the current input file, the record is auto-
matically  separated  into fields.  A field is simply a string of
consecutive characters delimited by either the beginning  or  end
of  line,  or  a field separator character.  Initially, the field
separators are the space and tab character.   The  special  unary
operator  '$'  is used to reference one of the fields in the cur-
rent input record (line).  The fields are  numbered  sequentially
starting  at  1.   The	expression $0 references the entire input
line.  Similarly, the record separator is used to  determine  the
end of an input line, initially the newline character.	The field
and record separators may be changed programatically  by  one  of
the  actions and will remain in effect until changed again.  Mul-
tiple (up to 10) field separators are allowed at a time, but only
one  record  separator.   Fields behave exactly like strings; and
can be used in the same context as a character array.  These  ar-
rays  can be considered to have been declared as:      char ($n)[
128 ]; In other words, they are 128 bytes long.  Notice that  the
parentheses  are  necessary  because the operators [] and $ asso-
ciate from right to left; without them, the statement would  have
parsed	as:	 char $(1[ 128 ]); which is obviously ridiculous.
If the contents of one of these field arrays is altered,  the  $0
field  will  reflect  this change.  For example, this expression:
     *$4 = 'A'; will change the first  character  of  the  fourth
field to an upper- case letter 'A'.  Then, when the following in-
put line:      120 PRINT  "Name 	 address	 Zip"  is
processed,   it   would  be  printed  as:	120  PRINT  "Name
Address        Zip"; Fields may also be modified with the strcpy()
function  (see below).	For example, the expression:	  strcpy(
$4, "Addr." ); applied	to  the  same  line  above  would  yield:
     120  PRINT  "Name		Addr.	      Zip"  The following
variables are pre-defined:
   FS	       Field separator (see below).
   RS	       Record separator (see below also).
   NF	       Number of fields in current input record (line).
   NR	       Number of records processed thus far.
   FILENAME    Name of current input file.
   BEGIN       A special <pattern> that matches the beginning  of
	       input text.
   END	       A  special <pattern> that matches the end of input
	       text.
Awk also provides some useful built-in functions for  string  ma-
nipulation and printing:
   print(arg)  Simple  printing  of  strings  only, terminated by
	       '
'.
   printf(arg...)Exactly the printf() function from C.
   getline()   Reads the next record and  returns  0  on  end  of
	       file.
   nextfile()  Closes  the current input file and begins process-
	       ing the next file
   strlen(s)   Returns the length of its string argument.
   strcpy(s,t) Copies the string t to the string s.
   strcmp(s,t) Compares the s to t and returns 0 if they match.
   toupper(c)  Returns its character argument converted to upper-
	       case.
   tolower(c)  Returns its character argument converted to lower-
	       case.
   match(s,@re@)Compares the string s to the  regular  expression
	       re  and	returns the number of matches found (zero
	       if none).
Awk was written by Saeko Hirabauashi and Kouichi Hirabayashi.
All times are GMT -4. The time now is 08:29 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy