Bash 使用联接的AWK中记录的叉积

Bash 使用联接的AWK中记录的叉积,bash,shell,awk,text-processing,gawk,Bash,Shell,Awk,Text Processing,Gawk,我有一个数据集,包含1994条记录和13个字段。我正在尝试获取以下数据集的叉积: 数据集 叉积的输出将是数据集中的每条记录与数据集中的所有其他记录并行(连续列)。如下图所示: 预期产量 当我执行代码:join file{,}-j99时,我得到了一个在另一个下面的叉积记录。 如果我对小于10的记录应用相同的代码,那么输出与预期的一样。我尝试将-j的值更改为99999和9999999,但输出没有更改 我得到的输出是: 所以,我有1994条记录,我应该得到:1994*1994=3976036,但是我得

我有一个数据集,包含1994条记录和13个字段。我正在尝试获取以下数据集的叉积:

数据集 叉积的输出将是数据集中的每条记录与数据集中的所有其他记录并行(连续列)。如下图所示:

预期产量 当我执行代码:
join file{,}-j99
时,我得到了一个在另一个下面的叉积记录。 如果我对小于10的记录应用相同的代码,那么输出与预期的一样。我尝试将-j的值更改为99999和9999999,但输出没有更改

我得到的输出是:
所以,我有1994条记录,我应该得到:1994*1994=3976036,但是我得到了其中的两行,因为记录是一行在另一行下面的。

交叉连接是每行的每一行。因此,告诉awk在每行旁边打印整个文件。差不多

#!/usr/bin/awk -f
{
    cmd = "awk -v LINE='" $0 "' " "'{ printf(\"%s\\t%s\\n\", LINE, $0) }' " \
    FILENAME
    system(cmd)
}

但我永远不会这样做。它的效率很低,调用awk O(N)次,并且没有得到多少帮助。我将文件导入SQLite,并使用一个交叉连接,它给了我一个
where
子句和命名列

这同样适用于13个字段。你的操作系统是什么?您的问题将显示一个包含简洁、可测试的示例输入和预期输出的示例。我认为您的问题是由于行结尾造成的。如果您从windows环境中复制了文件,请运行
dos2unix文件
,这可能是原因,我将尝试更新you@karakfa是的,它与dos2unix有关。它起作用了。感谢你,通过这样做,我试图找到两者之间的距离。也就是说,取第一条记录并与每条记录进行比较,计算欧几里德距离,最后查找最接近该记录的记录,并检查字段(如$6)。如果两条记录都在同一个类字段中,我会将精确度增加+1。我正在尝试使用AWK计算1nn精度。但是很难找到最佳的方法。你能检查一下这个链接并告诉我怎么做吗:
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26
.  .  .  .  .  .  .  .  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
.  .  .  .  .  .  .  .  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
.  .  .  .  .  .  .  .  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
.  .  .  .  .  .  .  .  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13
.  .  .  .  .  .  .  .  .   .   .   .   .
.  .  .  .  .  .  .  .  .   .   .   .   .
#!/usr/bin/awk -f
{
    cmd = "awk -v LINE='" $0 "' " "'{ printf(\"%s\\t%s\\n\", LINE, $0) }' " \
    FILENAME
    system(cmd)
}