68user's page 掲示板

Prev< No. 4583〜4584> Next  [最新発言に戻る] [過去ログ一覧]
No. 4583 # べた 2006/04/19 (水) 21:00:53
>>4582 zsh

zshさん、ありがとうございます。
>str_head_2=head_string(NF+1);
>for (k=4; k<chk_point; k++) {
の行を修正したら期待する結果が得られました。

ただ、ファイルのフォーマットに規則性がないことがわかり、
データによっては、正しく出力されないものがでてきました。
フィールド11に、「:」が存在しないデータがあるのです。

a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,111,123,SSS,A01,,:
a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,,,,123:456:789:100:100,A01:A02:A03:3A:NTT0001,

「 if($chk_col ~ /:/) {」
の判定を増やし、フィールド番号を取得できればできますか。

No. 4584 # べた 2006/04/19 (水) 22:45:43
>>4582 zsh
>>4583 べた

一応、動きます。
以下のようになるのでしょうか。

BEGIN{
        FS=",";
        chk_col=11;
}
{
        str_head_1=$1;
        split_num=chk_comma_max(NF);
        if(split_num!=0) {
                str_head_2=head_string(chk_col);
                split($chk_col, str_foot, ":");
                for (i=1; i<=split_num; i++) {
                        for (j=chk_col+1; j<=NF; j++) {
                                split($j, col_buf, ":");
                                str_foot[i]=sprintf("%s,%s", str_foot[i], col_buf[i]);
                        }
                        print str_head_1 "," i "," str_head_2 "," str_foot[i];
                }
        } else {
                str_head_2=head_string(NF+1);
                print str_head_1 ",1," str_head_2;
        }
}
function chk_comma_max(chk_point) {
        comma_num=0;
        for (k=chk_col; k<=chk_point; k++) {
                if($k ~ /:/) {
                        comma_num=split($k, s, ":");
                        break;
                }
        }
        return comma_num;
}
function head_string(chk_point) {
        str_buf=$3;
        for (k=4; k<chk_point; k++) {
                str_buf=sprintf("%s,%s", str_buf, $k);
        }
        return str_buf;
}

Prev< No. 4583〜4584> Next  [最新発言に戻る] [過去ログ一覧]