0

私は 50 行と 150 万列の大きな行列を持っています。これらの 150 万列のうち、最初の 2 つは私のヘッダーです。

データを列ごとに細かく分割しようとしています。たとえば、各小さなセットは 50 行と 100 列になります。ただし、各小さなデータには、ヘッダーとして上記の最初の 2 つの列が必要です。

私は試した

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の代わりに2 行と 2 列でテストしました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 に答える