awk for 关联数组上的循环

awk for loops on the associative array

下面的代码只打印行 ab 忽略 c

awk '{a[[=10=]]} END {for(i in a) for(j in a) for(k in a) print i, j, k}' < <(echo -e 'a\nb\c\n')

output:
a a a
a a b
a b a
a b b
b a a
b a b
b b a
b b b

在上面的代码中要更改什么,以便行 c 出现在输出排列中?

您不需要使用进程替换。只需使用这样的此处字符串:

awk '{a[[=10=]]} END {for(i in a) for(j in a) for(k in a) print i, j, k}' <<< $'a\nb\nc'

a a a
a a b
a a c
a b a
a b b
a b c
a c a
a c b
a c c
b a a
b a b
b a c
b b a
b b b
b b c
b c a
b c b
b c c
c a a
c a b
c a c
c b a
c b b
c b c
c c a
c c b
c c c

请注意 printf 更便携、更一致,因此最好使用 < <(printf 'a\nb\nc\n') 而不是 echo -e