.mp4xyz で終わる長いファイル名のリストがあります。
12334,dogimage.mp4001
12335,dogimage.mp4002
12336,dogimage.mp4003
12347,cats.mp4001
12348,cats.mp4002
同じ名前を共有するすべてのイメージを組み合わせて、出力をこの形式に変換する必要があります。この例ではdogimage.mp4
andだけを使用していますが、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" )
}
}