データファイルが次の場合:
snp200 snp1 snp100 snp32 1 1 0 2 0 0 0 2 2 2 2 1...
snp..が完了したら、列名として使用し、残りの数字を均等に分割します(各行の合計数は最初の行の列名の数と等しくなければなりません)。どのように行を分割し、各行ごとに次の行に入れます。この小さな例には4つの列名があるため、残りの4行には4桁の出力が必要です。
snp200 snp1 snp100 snp32
1 1 0 2
0 0 0 2
2 2 2 1
...
実際のデータが非常に大きいことを考慮すると(列名が32000以上)、提案がある場合
ベストアンサー1
1つのオプションは、次を使用することです。真珠 正規表現、このように:
cat in.txt | perl -pe 's/(([^ ]+ +){4})/$1\n/g' > out.txt
正規表現は、1つ以上の空白以外の項目と1つ以上の空白を検索し、最初の2つを4つのグループにグループ化してから、各一致の後に新しい行を追加することを意味します。
テストケース:
echo "snp200 snp1 snp100 snp32 1 13454356 0 2 0 0 0 2 2 2 2 1" | perl -pe 's/(([^ ]+ +){4})/$1\n/g'
snp200 snp1 snp100 snp32
1 13454356 0 2
0 0 0 2
2 2 2 1