Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell AWK功率集的实现_Shell_Unix_Awk_Powerset - Fatal编程技术网

Shell AWK功率集的实现

Shell AWK功率集的实现,shell,unix,awk,powerset,Shell,Unix,Awk,Powerset,在shell中提供了一个实现,下面是我对它的看法: pa() { if [ "$#" = 0 ] then echo else ( shift pa "$@" ) | while read qu do printf '%s %s\n%s\n' "$1" "$qu" "$qu" done fi } pa x y z 我认为有趣的是,上述页面的作者发表了以下评论: 没有好的AWK解决方案。欢迎您给我发电子邮件: 这不能在AWK中完成,还是shel

在shell中提供了一个实现,下面是我对它的看法:

pa() {
  if [ "$#" = 0 ]
  then echo
  else (
    shift
    pa "$@"
  ) | while read qu
    do printf '%s %s\n%s\n' "$1" "$qu" "$qu"
    done
  fi
}
pa x y z
我认为有趣的是,上述页面的作者发表了以下评论:

没有好的AWK解决方案。欢迎您给我发电子邮件:


这不能在AWK中完成,还是shell在这里做得更好?

下面是一个改编自以下内容的解决方案:


这里是另一种AWK方法:

echo a b c | awk '{for(i=0;i<2^NF;i++) {
                     for(j=0;j<NF;j++)
                        if(and(i,(2^j))) printf "%s ",$(j+1)
                     print ""}}'

a
b
a b
c
a c
b c
a b c
echo a b c | awk'{for(i=0;i在GNU awk中(由于
lshift
拆分的方式:)


…结果与@karakfa的解决方案基本相同,甚至在变量名上也是如此。我需要新的朋友和变量。@StevenPenny:更准确地说,使用
作为
split()
的第三个(fs)用于将字符串拆分为单个字符的参数不符合POSIX,但GNU Awk、BSD Awk和Mawk都支持它。您应该将此代码放在下面的代码Golf power set实现中:…除非您可以使其更短…:d感谢您的建议。我在那里添加了此参数。您可以将I=0初始化从e第一个循环。优雅简洁。值得注意的是,除了第一个输出行外,每个输出行都有一个尾随空格。GNU Awk是唯一支持
和()
的主要Awk实现。
echo x y z | power-set.awk
echo a b c | awk '{for(i=0;i<2^NF;i++) {
                     for(j=0;j<NF;j++)
                        if(and(i,(2^j))) printf "%s ",$(j+1)
                     print ""}}'

a
b
a b
c
a c
b c
a b c
$ cat program.awk
BEGIN {
    n=split(s,a,"")
    for(i=1;i<2^n;i++) {
        for(j=1;j<=n;j++)
            if(and(lshift(1,(j-1)),i))
                printf "%s", a[j]
        print ""
    }
}
$ awk -v s="abc" -f program.awk
a
b
ab
c
ac
bc
abc