Monday, 28 July 2008
Extract Lines with Line Numbers using Gawk, Groovy, Perl, Python and Ruby
More ways to extract a block of text from a stream and prepend the line number to each line.
Below is the Gawk version. The built-in variables NR is the number of the current line and $0 is the content of the current line.
gawk "(NR >= r1 && NR <= r2) {printf("""%4d %s\n""", NR, $0)}"
The Perl and Ruby scripts are exactly the same. The built-in variable $. holds the number of the current line and $_ holds the text of the current line.
perl|ruby -ne "printf '%4d %s', $., $_ if $. >= r1 && $. <= r2"
The Groovy command line options are similar to the Perl and Ruby version, except that you have to separate -n and -e. The built-in variable count hods the number of the current line and line holds the text of the current line.
groovy -n -e "if (count >= r1 && count <= r2) out.format '%4d %s\n', count, line"
The Python version is verbose due to boilerplate code to iterate through all rows in a file:
python -c "import sys; print ''.join('%4d %s' % (r, l) for r, l in enumerate(sys.stdin) if r >= r1 and r <= r2)"
See Also
PS
2008-07-29: Added Groovy version.
Labels: Gawk, Groovy, Perl, Python, Ruby
Saturday, 15 December 2007
Two Hello World Windows in Groovy
Groovy is scripting language on the Java platform. Groovy is interesting because it can be compiled into Java byte-code and makes heavy use of closures.
Groovy Hello World
In the beginning, I ported my Jython version into Groovy. It looks pretty much the same as the Jython version:
// Hello World in Groovy
f = new javax.swing.JFrame("Hello World")
f.setSize(170,70)
f.contentPane.layout = new java.awt.FlowLayout()
f.defaultCloseOperation = javax.swing.JFrame.EXIT_ON_CLOSE
f.add(new javax.swing.JLabel("Label me:"))
f.add(new javax.swing.JButton("Press me"))
f.show()
Groovy + SwingBuilder Hello World
Groovy has a helper class called SwingBuilder to make it much easier to write Swing applications. Here's one way to re-write the program:
// Hello World Window in Groovy + SwingBuilder
sb = new groovy.swing.SwingBuilder()
f = sb.frame(
title:"Hello World"
,size:[170,70]
,defaultCloseOperation: javax.swing.JFrame.EXIT_ON_CLOSE) {
flowLayout()
label(text:"Label me:")
button(text:"Press me")
}
f.show()
SwingBuilder is quite wonderful because it allows you to define a GUI with a minimum of code noise
. The definition of a JFrame probably maps a keyword X to a setX() function but I haven't worked out how SwingBuilder converts words such as flowLayout()
, label
and button
to Swing objects and functions.
Del.icio.us
Stumble It!


