1つの列(長い)をさまざまな長さの複数の列(短い)に変換する

1つの列(長い)をさまざまな長さの複数の列(短い)に変換する

1つのデータ列(つまり、1行につき1つのデータ値)を含むファイルがあります。私はこのデータをいくつか解釈します。データセット; データセットはNA1 つ以上の行に分けられます。データセットの長さはさまざまです。これを複数列形式に変換したいと思います。ここで、各データセットは、入力ファイルに表示されるのと同じ順序で列にあります。

たとえば、次のファイルがあります(実際には、このファイルにはより多くのデータが含まれています)。

NA
4
3
5
7
8
3
NA
NA
NA
3
4
5
2
NA
2 
7
4
6
9
NA

私の予想結果は次のとおりです。

4 3 2
3 4 7
5 5 4
7 2 6
8 . 9
3

8と9の間の点は実際には必要ありませんが、スペースで置き換えることができます。

ベストアンサー1

awk各データセット(データがNA行の間にある)を別々のファイルに分割し、行をスキップしてNA一緒に入れるpasteことができます。

awk '/^NA$/ && !NA{N++; NA=1; next} !/^NA$/{print >"file"N; NA=0}
    END{system("paste file*")}' inile.txt

このNAフラグは、ファイルを順次生成するために使用され、以下で使用できます。

awk '/^NA$/{N++; next} !/^NA$/{print >"file"N}
    END{system("paste file*")}' inile.txt

出力は次のとおりです

4 3 2
3 4 7
5 5 4
7 2 6
8   9
3

おすすめ記事