stringfor-loopawk

loop over characters in input string using awk


Believe it or not, I can't find the answer to what I would think would be this very basic question.

In awk, how can I loop over the input string character by character? Let's say I just wanted to print them out. Is there an array I can access? Or do I need to use substr?

Basically, something like:

echo "here is a string" | awk '
{ for(i=0; i<[length of input string]; i++) 
    printf [value at index i in array x]; 
}'

Frankly, I'm embarrassed.


Solution

  • You can convert a string to an array using split:

    echo "here is a string" | awk '
    { 
      split($0, chars, "")
      for (i=1; i <= length($0); i++) {
        printf("%s\n", chars[i])
      }
    }'
    

    This prints the characters vertically, one per line.