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]
}