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?

  • just_another_person@lemmy.world
    link
    fedilink
    arrow-up
    2
    arrow-down
    1
    ·
    edit-2
    2 days ago

    It works with long commands as well. Thinking in awk though, I would only use it after a statement is complete. You wouldn’t be able to split up expressions like this, but if you’re just talking about making it more readable, it should work.

    Backslash works for long commands as well, but it’s not going to split up an expression or string properly.

    Works: apt install package1 \ package2 \ package3

    Won’t work: apt install pack\ age1 package2 pack\ age3

    You can get cleaner code by substituting content blocks as variables, or piping EOF in and out at various places as other options.

    • rhabarba@feddit.orgOP
      link
      fedilink
      arrow-up
      1
      ·
      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
          3
          ·
          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!