Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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
Sorting AWK-如何进行排序?_Sorting_Awk_Multiple Columns - Fatal编程技术网

Sorting AWK-如何进行排序?

Sorting AWK-如何进行排序?,sorting,awk,multiple-columns,Sorting,Awk,Multiple Columns,在awk中,我如何做到这一点: 1303361997;15;67.067014 1303361997;5;51.529837 1303361997;14;47.036197 1303361997;3;44.064681 1303361997;6;37.632831 1303361997;23;24.990078 1303361997;24;26.750984 1303361998;15;67.074100 1303361998;5;51.522981 1303361998;14;47.02818

在awk中,我如何做到这一点:

1303361997;15;67.067014
1303361997;5;51.529837
1303361997;14;47.036197
1303361997;3;44.064681
1303361997;6;37.632831
1303361997;23;24.990078
1303361997;24;26.750984
1303361998;15;67.074100
1303361998;5;51.522981
1303361998;14;47.028185
1303361998;3;44.056715
1303361998;6;37.638584
1303361998;23;24.987800
1303361998;24;26.756648
当第二列中的数字不存在时,输出文件中的该日期应替换为零。 First place是第一列的编号。价值观​​用于确定第三列在输出文件中的位置的第二列数据。第一列每次可能以不同的值开头。通过对第一列和第二列进行排序,获得所需的输出:

1303361997;0;0;44.064681;0;51.529837;37.632831;0;0;0;0;0;0;0;47.036197;67.067014;0;0;0;0;0;0;0;24.990078;26.750984;
1303361998;0;0;44.056715;0;51.522981;37.638584;0;0;0;0;0;0;0;47.028185;67.074100;0;0;0;0;0;0;0;24.987800;26.756648;
$cat tst.awk
开始{FS=“;”}
NR==1{

对于(i=1;iI修复了代码以排除理解上的歧义。非常感谢。编辑后,我看到没有显示代码的更正版本。输入窗口决定捉弄我。无论如何,请提供正确的版本。我理解正确处理正确的数据,我需要读取第一列和s的值在循环中替换此值?@diletant我更新了我的答案,以根据新的样本输入生成新的预期输出。@Morton再次感谢您。我没有等待,并做了一些不同的修改。第一列中的第一个值始终是最小值,然后我们可以将其用作循环的初始值。优点是没有需要查找最小值。
BEGIN{FS=“;”OFS=“;”;}{val[$1,$2]=$3;for(i=1;i max[i]?$i:max[i]);if(NR==1)start=$1;}}}END{for(r=start;r)
$ cat tst.awk
BEGIN { FS=";" }
NR == 1 {
    for (i=1;i<=2;i++) {
        min[i] = max[i] = $i
    }
}
{
    val[$1,$2] = $3
    keys[$1]
    for (i=1;i<=2;i++) {
        min[i] = ($i < min[i] ? $i : min[i])
        max[i] = ($i > max[i] ? $i : max[i])
    }
}
END {
    for (r=min[1];r<=max[1];r++) {
        if (r in keys) {
            printf "%d",r
            for (c=1;c<=max[2];c++) {
                printf ";%s", ((r,c) in val ? val[r,c] : 0)
            }
            print ";"
        }
    }
}
$
$ cat file
1303361997;15;67.067014
1303361997;5;51.529837
1303361997;14;47.036197
1303361997;3;44.064681
1303361997;6;37.632831
1303361997;23;24.990078
1303361997;24;26.750984
1303361998;15;67.074100
1303361998;5;51.522981
1303361998;14;47.028185
1303361998;3;44.056715
1303361998;6;37.638584
1303361998;23;24.987800
1303361998;24;26.756648
$
$ awk -f tst.awk file
1303361997;0;0;44.064681;0;51.529837;37.632831;0;0;0;0;0;0;0;47.036197;67.067014;0;0;0;0;0;0;0;24.990078;26.750984;
1303361998;0;0;44.056715;0;51.522981;37.638584;0;0;0;0;0;0;0;47.028185;67.074100;0;0;0;0;0;0;0;24.987800;26.756648;