3 ms·
As a sysadmin (not web/app or systems programmer) I spent about 7 years using Perl (wrote my company's HR <-> LDAP synchronization system in it) until Python ca
by ghshephard 13y ago
As a sysadmin (not web/app or systems programmer) I spent about 7 years using Perl (wrote my company's HR <-> LDAP synchronization system in it) until Python came along (for me, around 2003), nowadays for one or two liners, it's sed/awk - the simplicity of awk '{print $1,$2}', awk '{tot+=$2; c++}END{print tot/c}' has just worked it's way into my fingers, I don't even have to think about sed 's/^.client="\(.\)",dev.*/\1/' foo.txt - I just look at the log file and the sed expression just appears at my fingertips. Anything more complex than that (unless it's a really obvious fit for awk) I switch over to Python. Its simple data model for things like HoA or AoH just imposes less cognitive overhead on me, and it's rich assembly of built in libraries make me productive from the get-go. This sort of thing would be incredibly difficult in awk - not sure if I would have to go to CPAN with perl - but I just assumed (and was correct) that python would have it built in.
import json
f=open("bus-stops.json")
j=json.load(f)
for a in j:
print a['no'],",",a['lat'],",",a['lng'],",",a['name']
A simple "import json", "help(json)" at the Python command line, and 2 minutes later I was done.
Also - I'm able to understand my code the next day - something I was never able to do with Perl, but for some reason I can with Python.
I probably spend 90% of my time in sed/awk, and 10% of my time in Python. Haven't touched Perl in 10 years - not because it isn't an awesome language (it really is) - it's just that I have room in my head for one full blown language at a time, and Python replaced Perl for me.
- tux1968 13y agoYeah, i have no problem with python or any other language. Use what works for you. But perl does an acceptable job on every one of your examples.. perl -naE 'say $F[0], $F[1]' perl -nae '$tot+=$F[1]; $c++;END{print $tot/$c}' perl -ape 's/^.client="(.)",dev.*/\1/' foo.txt And finally: use JSON; use IO::All; use feature 'say'; $f = io('bus-stops.json')->all; $j = decode_json($f); $,=','; for (@$j) { say @$_{'no','lat','lng','name'}; } I still think newbies would get much more value out of learning perl basics than spending any time on sed/awk intricacies. But to each his own.
- jnazario 13y agoawk tip: in your averaging example, the "c++" and reference to c in the END block can be replaced by the built-in var NR (for number of records). awk's builtins are useful.