ファイルを1つのデータフレームにマージ

ファイルを1つのデータフレームにマージ

それぞれ7つの列を持つほぼ160のtxtファイルがあります。最初と6番目の列データ(Geneid、Length)は各ファイルで同じであるため、最終ファイルの最初と2番目の列にして7番目の列データ(sample1、sample2、sample3...)を抽出したいと思います。 .) 最終ファイルに入れます。

例:

サンプル1:

Geneid              Chr     Start   End Strand  Length  Sample1
ENSG00000223972.5   Chr1    34554   12227   ++  1735    0
ENSG00000227232.5   Chr2    14404   1450    ++  1351    12
ENSG00000278267.1   Chr3    17369   17436   ++   68     20
ENSG00000243485.4   Chr4    29554   3003    ++  1021    0
ENSG00000237613.2   Chr5    14404   35174   ++  1219    0

サンプル2:

Geneid              Chr    Start    End Strand  Length  Sample2
ENSG00000223972.5   Chr1    11869   1450    ++  1735    180
ENSG00000227232.5   Chr2    14404   17436   ++  1351    40
ENSG00000278267.1   Chr3    17369   17436   ++   68     9
ENSG00000243485.4   Chr4    14404   3003    ++  1021    49
ENSG00000237613.2   Chr5    17369   3003    ++  1219    3

サンプル3:

Geneid              Chr    Start    End Strand  Length  Sample3
ENSG00000223972.5   Chr1    17369   1450    ++  1735    11
ENSG00000227232.5   Chr2    29554   17436   ++  1351    156
ENSG00000278267.1   Chr3    34554   3003    ++  68      56
ENSG00000243485.4   Chr4    14404   3003    ++  1021    89
ENSG00000237613.2   Chr5    17369   35174   ++  1219    23

最終出力は次のようにする必要があります

Geneid            Length    Sample1 Sample2 Sample3
ENSG00000223972.5   1735    0       180      11
ENSG00000227232.5   1351    12      40      156
ENSG00000278267.1   68      20      9       56
ENSG00000243485.4   1021    0       49      89
ENSG00000237613.2   1219    0       3       23

答え1

(修正された質問の場合)awkと一緒に使用してください。paste

awk '{printf("%s\t%s", $1, $6); 
    for(i=7;i<=NF;i+=7) printf ("\t%s", $i); printf "\n"}' <(paste files) >final_file

添付:printfフィールドの実際の値に基づいて書式コントロールを変更します。

説明する:

  • {printf ("%s\t%s" ,$1, $6)}1列と6列最初に印刷します。

  • for(i=7;i<=NF;i+=7) printf ("\t%s", $i);その後、残りのフィールドを繰り返し、列7とモジュール7を持つすべてのフィールドのみを印刷します。

  • まず、すべてをfiles一緒に貼り付けてから渡しますawk。つまり、複数のファイル名を指定するfilesことができ、すべてのファイルはそのファイル名で始まり、その後に何でも付けられます。pastemyfiles*myfiles

関連情報