Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
Database 使用awk从数据中提取矩阵_Database_Bash_Matrix_Awk - Fatal编程技术网

Database 使用awk从数据中提取矩阵

Database 使用awk从数据中提取矩阵,database,bash,matrix,awk,Database,Bash,Matrix,Awk,警告,不是awk程序员 我有一个文件,我们叫它file.txt。它有一个数字列表,我将使用它从目录的其余部分(其中充满了文件*.asc)中查找所需的信息。其余的文件没有相同的长度,但由于我将基于file.txt绘制数据,因此我将构建的矩阵将具有相同的行数。但是,所有文件都包含相同数量的列,即3。第一列将与file.txt进行比较,每个*.asc文件的第二列将用于构建矩阵。以下是我到目前为止的情况: awk ' NR==FNR{ A[$1]; next}

警告,不是awk程序员

我有一个文件,我们叫它file.txt。它有一个数字列表,我将使用它从目录的其余部分(其中充满了文件*.asc)中查找所需的信息。其余的文件没有相同的长度,但由于我将基于file.txt绘制数据,因此我将构建的矩阵将具有相同的行数。但是,所有文件都包含相同数量的列,即3。第一列将与file.txt进行比较,每个*.asc文件的第二列将用于构建矩阵。以下是我到目前为止的情况:

awk '
    NR==FNR{
        A[$1];
        next}
    $1 in A
       {print $2 >> "data.txt";}' file.txt *.asc
但是,这会打印上一个文件下方每个文件中的信息。我想要信息像矩阵一样并排排列。我查找了paste,但它似乎是在awk之前调用的,所有示例都只是几个文件。我试着用它来代替印刷品,但没有效果

如果有人能帮我,这将是我项目的最后一部分。非常感谢

您可以尝试:

awk -f ext.awk file.txt *.asc > data.txt
其中
ext.awk

NR==FNR {
    A[$1]++
    next
}
FNR==1 {
    if (ARGIND > 2)
        print ""
}
$1 in A {
    printf "%s ", $2
}
END {
    print ""
}
使现代化 如果没有Gnu Awk,则argid变量不可用。然后你可以试试

NR==FNR {
    A[$1]++
    next
}
FNR==1 {
    if (++ai > 1)
        print ""
}
$1 in A {
    printf "%s ", $2
}
END {
    print ""
}

你能举一个输入文件和所需输出矩阵的简短示例吗?当你说某个东西应该与其他东西进行“比较”时,重要的是要说明比较是什么-等于、小于、字符串、数字等等。所以我们不是在猜测。正如Marcus所说,发布一些示例输入和预期输出。这些数字是双倍的。要比较的文件有三列双精度。我想将file.txt中的数字与其他文件中的第一列进行比较。如果数字匹配,则打印第二个字段,如果不匹配,则打印-1。这有帮助吗?您应该说明解决方案何时是特定于gawk的,因为这是ARGIND提供的,所以OP不会浪费时间在他们正在使用的任何非GNU awk上调试它。