0

我有一个 50 行和 150 万列的大矩阵。在这 150 万列中,前两个是我的标题。

我正在尝试将我的数据按列分成小块。因此,例如每个小集合将是 50 行和 100 列。但是每个小数据必须有上面提到的前两列作为标题。

我试过了

awk '{print $1"\t"$2"\t"}' test | cut -f 3-10
awk '{print $1"\t"$2"\t"}' test | cut -f 11-20
...

或者

cut -f 1-2 | cut -f 3-10 test
cut -f 1-2 | cut -f 11-20 test
...

但以上都不起作用。

有没有一种有效的方法来做到这一点?

4

1 回答 1

0

的一种方法。我不知道它 ( awk) 是否可以处理这么多的列,但试一试。它使用模数运算符来切割每一行特定数量的列。

awk '{
        ## Print header of first line.
        printf "%s%s%s%s", $1, FS, $2, FS
        ## Count number of columns printed, from 0 to 100.
        count = 0
        ## Traverse every columns but the first two keys.
        for ( i = 3; i <= NF; i++ ) {
            ## Print header again when counted 100 columns.
            if ( count != 0 && count % 100 == 0 ) {
                printf "%s%s%s%s%s", ORS, $1, FS, $2, FS
            }
            ## Print current column and count it.
            printf "%s%s", $i, FS
            ++count
        }
        ## Separator between splits.
        print ORS
    }
' infile

我已经用两行和两4列而不是100. 这是测试文件:

key1 key2 one two three four five six seven eight nine ten
key1 key2 one2 two2 three2 four2 five2 six2 seven2 eight2 nine2 ten2

结果:

key1 key2 one two three four 
key1 key2 five six seven eight 
key1 key2 nine ten 

key1 key2 one2 two2 three2 four2 
key1 key2 five2 six2 seven2 eight2 
key1 key2 nine2 ten2
于 2013-07-21T21:13:39.220 回答