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?

  • rhabarba@feddit.orgOP
    link
    fedilink
    arrow-up
    0
    ·
    2 days ago

    You wouldn’t be able to split up expressions like this

    Ah, that already answers my original question. A pity!

      • rhabarba@feddit.orgOP
        link
        fedilink
        arrow-up
        0
        ·
        2 days ago

        Ah, I could probably use Perl or something as well. I was hoping awk could do it though. But thank you, I hadn’t heard about pyp before!