共通キーワードに基づいてデータを形式で解析します。

共通キーワードに基づいてデータを形式で解析します。

.mp4xyz で終わる長いファイル名のリストがあります。

12334,dogimage.mp4001
12335,dogimage.mp4002
12336,dogimage.mp4003
12347,cats.mp4001
12348,cats.mp4002

同じ名前を共有するすべてのイメージを組み合わせて、出力をこの形式に変換する必要があります。この例ではdogimage.mp4andだけを使用していますが、cats.mp4何千ものキーワードがあります。

a:3:{i:0;s:4:"12334";i:1;s:4:"12335";i:2;s:4:"12336";}
a:2:{i:0;s:4:"12347";i:1;s:4:"12348";}

次の文字列は、次を示します。

a:3& a:2= 総写真数

i:0=このキーワードの画像数

ベストアンサー1

愚かな:

BEGIN{

    # split by , or .mp4
    FS=",|\\.mp4"

    # sort array by numeric value
    PROCINFO["sorted_in"] = "@val_num_asc"
}

# store count in a, store others as key, value pair in d[keyword]
{ a[$2]++; d[$2][$3]= $1 }

END{
    for( keyword in d ){
        printf( "a:%d:{", a[keyword] )
        for( i in d[keyword] )
            printf( "i:%d;s:4:\"%d\";", i-1, d[keyword][i] )
        printf( "}\n" )
    }
}

修正する

キーワードの順序を維持するには:

BEGIN {
    # split by , or .mp4
    FS=",|\\.mp4"

    # sort array by numeric value
    PROCINFO["sorted_in"] = "@val_num_asc"
}

{
    # insert next ordered number into loop_order upon new keyword
    if(!($2 in d))
        loop_order[k++] = $2

    # store count in a, store others as key, value pair in d[$2]
    a[$2]++; d[$2][$3]= $1
}

END{
    for (j = 0; j < length(loop_order); ++j) {
        keyword = loop_order[j]
        printf( "a:%d:{", a[keyword] )
        for( i in d[keyword] )
            printf( "i:%d;s:4:\"%d\";", i-1, d[keyword][i] )
        printf( "}\n" )
    }
}

おすすめ記事