awk for 关联数组上的循环
awk for loops on the associative array
下面的代码只打印行 a 和 b 忽略 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
下面的代码只打印行 a 和 b 忽略 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