zsh-users
 help / color / mirror / code / Atom feed
* Extracting the 4th word of the first line in a file - is there a more elegant solution?
@ 2012-05-18 13:16 Ronald Fischer
  2012-05-18 13:30 ` Peter Stephenson
  0 siblings, 1 reply; 3+ messages in thread
From: Ronald Fischer @ 2012-05-18 13:16 UTC (permalink / raw)
  To: zsh-users

Within a script, I have need to store the 4th word in the first line of
a file.

Of course this is trivial to implement. However, I'm curious whether
there exists a better way to implement than what I found.

My current solution goes like this:

# $1 is the filename
line=$(head -n 1 $1)
field=${lin[(w)4]}

This is OK, but this needs an auxiliary variable 'line'. 


I could also do it like this:

field=$(head -n 1 $1|cut  -f 4 -d ' ')

No aux variable, but needs a pipe


So I wonder, whether there is a elegant "zsh" solution, which solves
this in a more elegant way?

Ronald
-- 
Ronald Fischer <ronaldf@eml.cc>
+  If a packet hits a pocket on a socket on a port, 
+  and the bus is interrupted and the interrupt's not caught,
+  then the socket packet pocket has an error to report.
+		(cited after Peter van der Linden)


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Extracting the 4th word of the first line in a file - is there a more elegant solution?
  2012-05-18 13:16 Extracting the 4th word of the first line in a file - is there a more elegant solution? Ronald Fischer
@ 2012-05-18 13:30 ` Peter Stephenson
  2012-05-21 19:48   ` Bart Schaefer
  0 siblings, 1 reply; 3+ messages in thread
From: Peter Stephenson @ 2012-05-18 13:30 UTC (permalink / raw)
  To: zsh-users

On Fri, 18 May 2012 15:16:54 +0200
Ronald Fischer <ynnor@mm.st> wrote:
> # $1 is the filename
> line=$(head -n 1 $1)
> field=${lin[(w)4]}

It depends a bit how big the file is.  If it's small, it's very easy,
and involves no extra processes (the "$(<...)" is optimised to a read):

  field=${$(<$1)[4]}

The disadvantage is that reads the entire file into memory first.  It's
hard to think of a way that avoids that that doesn't use an auxiliary
process, but apart from that it's still relatively straightforward
within zsh:

  field=${$(read -e <$1)[4]}

This reads a single line from the file and echoes it instead of
assigning it to a parameter.  You might want "read -qe" if the file
contains backslashes.

You can do it without an auxiliary process, but with a local variable,
which is probably more efficient and the best compromise:

  read -A line <$1
  field=$line[4]

-- 
Peter Stephenson <pws@csr.com>            Software Engineer
Tel: +44 (0)1223 692070                   Cambridge Silicon Radio Limited
Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, UK



Member of the CSR plc group of companies. CSR plc registered in England and Wales, registered number 4187346, registered office Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom
More information can be found at www.csr.com. Follow CSR on Twitter at http://twitter.com/CSR_PLC and read our blog at www.csr.com/blog


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Extracting the 4th word of the first line in a file - is there a more elegant solution?
  2012-05-18 13:30 ` Peter Stephenson
@ 2012-05-21 19:48   ` Bart Schaefer
  0 siblings, 0 replies; 3+ messages in thread
From: Bart Schaefer @ 2012-05-21 19:48 UTC (permalink / raw)
  To: zsh-users

On May 18,  2:30pm, Peter Stephenson wrote:
}
} You can do it without an auxiliary process, but with a local variable,
} which is probably more efficient and the best compromise:
} 
}   read -A line <$1
}   field=$line[4]

If you're already using a local throwaway,

    read x x x field x <$1

Or you can use the omnipresent local argv so you needn't declare it:

    (){ read -A argv; field=$4 } < $1

} You might want "read -qe" if the file contains backslashes.

I believe -q is a typo for -r there.


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-05-21 19:49 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-05-18 13:16 Extracting the 4th word of the first line in a file - is there a more elegant solution? Ronald Fischer
2012-05-18 13:30 ` Peter Stephenson
2012-05-21 19:48   ` Bart Schaefer

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).