Linux Shell脚本,使用awk进行对角词搜索

Linux Shell脚本,使用awk进行对角词搜索,linux,bash,shell,awk,diagonal,Linux,Bash,Shell,Awk,Diagonal,我正在寻找一种从这组字母中获得所有对角线组合的方法: a b c d e f h i j k l m o p q r s t v w x y z a c d e f g h j k l m n o 我有这样一个:awk'{++f;print$(f+0)}文件.txt 但这只能让我明白(如果我能增加,f+0,以某种方式增加16倍): 我需要另一半来。。这样(不必按以下顺序: a i q y g o h p x f n b j r z h o w e m c k s a v d l d

我正在寻找一种从这组字母中获得所有对角线组合的方法:

a b c d e f 
h i j k l m 
o p q r s t 
v w x y z a 
c d e f g h 
j k l m n o 
我有这样一个:
awk'{++f;print$(f+0)}文件.txt

但这只能让我明白(如果我能增加,f+0,以某种方式增加16倍):

我需要另一半来。。这样(不必按以下顺序:

a i q y g o
h p x f n
b j r z h
o w e m
c k s a
v d l
d l t
c k
e m
j 
f
您可以使用:

$datamash-t''转置
输出

a i q y g o
h p x f n
b j r z h
o w e m
c k s a
v d l
d l t
c k
e m
j
f

这是一个数组的作业

#!/usr/bin/awk -f

# Print diagonals from a square of text. 
# This script has no error checking.
# Written by PM 2Ring 2014.10.13

{
    for(i=1; i<=NF; i++) 
        a[NR,i] = $i
}

END{
    for(i=1; i<=NR; i++)
    {
        for(j=1; i+j-1<=NR; j++)
            printf "%s ", a[i+j-1, j]
        print ""
        if (i == 1) 
            continue
        for(j=1; i+j-1<=NR; j++)
            printf "%s ", a[j, i+j-1]
        print ""
    }
}
#!/usr/bin/awk -f

# Print diagonals from a square of text. 
# This script has no error checking.
# Written by PM 2Ring 2014.10.13

{
    for(i=1; i<=NF; i++) 
        a[NR,i] = $i
}

END{
    k = 1
    for(i=1; i<=NR; i++)
    {
        word = ""
        for(j=1; i+j-1<=NR; j++)
            word = word a[i+j-1, j]
        words[k++] =  word

        if (i == 1) 
            continue

        word = ""
        for(j=1; i+j-1<=NR; j++)
            word = word a[j, i+j-1]
        words[k++] = word   
    }

    numwords = k
    for (k=1; k<numwords; k++)
        print words[k]
}
打印正交对角线,如“flrxdj”,留给读者作为练习

这里有一个函数,可以打印给定单词中的所有子单词

!/usr/bin/awk-f
#打印给定单词的子单词
#2014年10月13日下午2点
函数打印子字(s、i、j、len)
{
len=长度(s)

对于(i=1;iSo什么是完整的期望输出?@Brutalized:您必须首先安装它,请参阅我希望避免使用for循环可以获得相同的结果,但我正在寻找一种更有效的方法(不安装任何东西,但这是一个好的解决方案!tnx)你可能知道一种方法来编辑你的代码,并从这个输出中获得所有可能的2,3,4,5,6个字母的单词吗?你可能知道一种方法来编辑你的代码,并获得所有可能的2,3,4,5,6个字母的单词组合吗?我知道,但我认为你应该自己尝试这样做。如果你被卡住了,发布你的代码(最好是在一个新问题中)我们会尽力帮忙,但我会给你一些提示。
a i q y g o
h p x f n
b j r z h
o w e m
c k s a
v d l
d l t
c k
e m
j
f
#!/usr/bin/awk -f

# Print diagonals from a square of text. 
# This script has no error checking.
# Written by PM 2Ring 2014.10.13

{
    for(i=1; i<=NF; i++) 
        a[NR,i] = $i
}

END{
    for(i=1; i<=NR; i++)
    {
        for(j=1; i+j-1<=NR; j++)
            printf "%s ", a[i+j-1, j]
        print ""
        if (i == 1) 
            continue
        for(j=1; i+j-1<=NR; j++)
            printf "%s ", a[j, i+j-1]
        print ""
    }
}
#!/usr/bin/awk -f

# Print diagonals from a square of text. 
# This script has no error checking.
# Written by PM 2Ring 2014.10.13

{
    for(i=1; i<=NF; i++) 
        a[NR,i] = $i
}

END{
    k = 1
    for(i=1; i<=NR; i++)
    {
        word = ""
        for(j=1; i+j-1<=NR; j++)
            word = word a[i+j-1, j]
        words[k++] =  word

        if (i == 1) 
            continue

        word = ""
        for(j=1; i+j-1<=NR; j++)
            word = word a[j, i+j-1]
        words[k++] = word   
    }

    numwords = k
    for (k=1; k<numwords; k++)
        print words[k]
}