1

入力

fish \t 1 \t red

fish \t 2 \t blue

fish \t 4 \t green

dog \t 1 \t blue

dog \t 3 \t yellow

cat \t 3 \t orange

出力:

fish \t red  \t blue \t _______ \t green

dog  \t blue \t ____ \t yellow 

cat  \t ____ \t ____ \t orange

入力ファイルから列 2 で指定された順序を維持しながら、配列を生成したいと考えています。この例では、2列目=3列の行がないので、「 」で押したいと思います。

私が作業している実際のファイルには、1 つの配列を埋める最大 98 の位置があります。

Perl の専門家から何か提案はありますか?

ありがとうございました!

4

2 に答える 2

0
$ awk -F'\t' '
!seen[$1]++ { keys[++k] = $1 }
NR==1 { min = max = $2 }
{
    min = ($2<min?$2:min)
    max = ($2>max?$2:max)
    map[$1,$2] = $3
}
END {
    for (k=1;k in keys;k++) {
        key = keys[k]
        printf "%s", key
        for (c=min; c<=max; c++) {
            val = ( (key,c) in map ? map[key,c] : "___" )
            printf "%s%s", FS, val
        }
        print ""
    }
}
' file
fish    red     blue    ___     green
dog     blue    ___     yellow  ___
cat     ___     ___     orange  ___
于 2013-07-27T00:12:50.483 に答える