For a reason not worth mentioning here, I would like to write a somewhat more complex awk script in which I would have to explain in detail what I am doing. (If only so that I’ll still know next week.) There doesn’t seem to be a way to wrap a list of conditions in GNU awk, right?

This is what I tried:

command-that-prints-a-table | awk '
    NR>1 &&                # Skip line 1
    NF>2 &&                # Skip lines with only one column
    substr($1,1,1) != "("  # Skip lines that start with a "("
    { print $1 }
'

Alas, that does not work - awk skips the conditions entirely and only runs print $1. It seems that escaping the newlines does not work either, which makes sense as the end of the lines are comments.

This would work:

command-that-prints-a-table | awk '
# - Skip line 1
# - Skip lines with only one column
# - Skip lines that start with a "("
    NR>1 && NF>2 && substr($1,1,1) != "("  { print $1 }
'

But - my original code has a few more conditions - it is rather annoying to read and maintain. Is there an elegant way to fix this?

  • aarch64@lemm.ee
    link
    fedilink
    English
    arrow-up
    5
    ·
    1 day ago

    You’re probably best off writing the awk script in its own file instead of straight on the command line. Then you can comment to your heart’s content without shell limitations. If you really want to do it inline, you might be able to do a $(# comment in a subshell). I remember doing something like that in the past, but I’m not near a computer to check right now.